Java 反思:为抽象创建构造函数 class

Java Reflection: create a constructor for an abstract class

如果我有这个 class 我无法修改...

public abstract class AClass {
    Object value;
    public AClass(Object value) { this.value = value; }
}

那我怎么用反射创建它的实例呢?
这...

Class<?> clazz = // some class
Constructor</*someClass*/> constructor = AClass.class.getConstructor(clazz);
Object key = clazz.getConstructor(Object.class).newInstance(/*something*/);
/*someClassResult */ result = constructor.newInstance(key);

在最后一行抛出 InstantiationException。

您可以实例化任何 class,甚至可以使用 sun.misc.Unsafe 抽象 classes。 示例:

Field theunsafeField = 
Unsafe.class.getDeclaredField("theUnsafe");
theunsafeField.setAccessible(true);
Unsafe unsafe = (Unsafe) theunsafeField.get(null);
AClass aclazz = (AClass) unsafe.allocateInstance(AClass.class);

否则你可以创建一个扩展 AClass 的小 class,然后你可以实例化你的实现