如果你有一个抽象类,你可以通过派生一个具体的匿名类来实例化它。这是一个例子:
abstract class A {
abstract void hello ();
}
A say = new A () { void hello () { System.out.println ("hello"); } }
say.hello(); // -> hello
如果类存储在 Class 对象中,如何做同样的事情?这是一个例子:
// -*- compile-command: "javac anon.java && java anon"; -*-
class anon
{
anon () throws Exception {}
abstract class AbstractClass
{
AbstractClass () throws Exception {}
abstract void id ();
}
AbstractClass x = new AbstractClass ()
{
void id () { System.out.println ("X"); }
};
Class<AbstractClass> abstractclass
= (Class<AbstractClass>)Class.forName ("anon$AbstractClass");
AbstractClass y = abstractclass.getConstructor().newInstance();
public static void main (String argv[]) throws Exception
{
anon main = new anon();
main.x.id(); // should print "X"
main.y.id(); // should print "Y"
}
}
第一个实例化 (x) 工作正常,但第二个 (y) 失败,因为它尝试直接实例化抽象类而不派生具体类。如何在只有 Class 对象的 Java 中做到这一点?