Java:使用类型参数访问私有构造函数

这是this question about java private constructors的后续。

假设我有以下类:

class Foo<T>
{
    private T arg;
    private Foo(T t) {
        // private!
        this.arg = t;
    }   

    @Override
    public String toString() {
        return "My argument is: " + arg;
    }   
}

我如何使用反射构造一个新的Foo(“hello”)?

回答

基于jtahlborn’s answer,以下作品:

public class Example {
    public static void main(final String[] args) throws Exception {
        Constructor<Foo> constructor;
        constructor = Foo.class.getDeclaredConstructor(Object.class);
        constructor.setAccessible(true);
        Foo<String> foo = constructor.newInstance("arg1");
        System.out.println(foo);
    }   
}
你需要得到类,找到构造函数,它接受一个具有T的下限(在这种情况下为对象)的单个参数,强制构造函数可访问(使用setAccessible方法),最后使用所需的参数调用它。
http://stackoverflow.com/questions/5629706/java-accessing-private-constructor-with-type-parameters

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:Java:使用类型参数访问私有构造函数