抽象クラスがある場合は、具体的な匿名クラスを派生させることでインスタンス化できます。これは例です:
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)は正常に機能しますが、2番目のインスタンス化(y)は、具象クラスを派生させずに抽象クラスを直接インスタンス化しようとするため失敗します。ClassオブジェクトしかないJavaでこれを行うにはどうすればよいですか?