Instantiating an inner class

前端 未结 4 1488
逝去的感伤
逝去的感伤 2020-12-29 08:51

I have a utility method and when irrelevant logic is removed from it, the simplified method would look like this:

public static  List<         


        
4条回答
  •  执笔经年
    2020-12-29 09:29

    If it's genuinely an inner class instead of a nested (static) class, there's an implicit constructor parameter, which is the reference to the instance of the outer class. You can't use Class.newInstance at that stage - you have to get the appropriate constructor. Here's an example:

    import java.lang.reflect.*;
    
    class Test
    {
        public static void main(String[] args) throws Exception
        {
            Class clazz = Outer.Inner.class;
    
            Constructor ctor = clazz.getConstructor(Outer.class);
    
            Outer outer = new Outer();
            Outer.Inner instance = ctor.newInstance(outer);
        }
    }
    
    class Outer
    {
        class Inner
        {
            // getConstructor only returns a public constructor. If you need
            // non-public ones, use getDeclaredConstructors
            public Inner() {}
        }
    }
    

提交回复
热议问题