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,然后你可以实例化你的实现
如果我有这个 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,然后你可以实例化你的实现