文字列の値でクラスをインスタンス化します。私はこれを行うためのいくつかの方法を示すいくつかのチュートリアルを見つけました。クラスはあるインタフェースから継承しなければならない、という特別なメソッドを持っているImplementMe
。だからここで私が試したものです:文字列からクラスをロードする
ImplmentMe a =
(ImplementMe) ImplementMe.class
.getClassLoader()
.loadClass("my.package.IImplementedYou")
.newInstance();
a.runMe();
それは動作しますが、それはとても醜いです。私は少なくともキャストを必要としないと予想していました。より良い方法があると教えてください。
キャストに関係なく必要です。コンパイラは 'Object'を自動的に' ImplementMe'に昇格することはできません。 –
それはとても奇妙です。私は 'ImplementMe.class.getClassLoader()'を使って、クラスが 'ImplementMe'から継承しなければならないというヒントを得ました。 – User1
'Class'には' asSubclass'メソッドがあります。 '... loadClass(...)。asSubclass(ImplementMe.class).newInstance()'は、(成功した場合) 'ImplementMe'インスタンスを返します。 – user2478398