I think your naming policy for classes causes some readibility problems. Class names should start with an uppercase. If it starts with a lower case, static access to methods of classes resembles normal access via an object. I tried to compile your first version of example class and it compiles. After i removed static modifier before createInner method, compiler warns me about static method violation.
I can't see any problem. Did you really not get such violation after removing static modifier, could you check your code?