私は抽象クラス 'A'を持ち、クラス 'B'と 'C'はAを継承しています。 実行時にいくつかの変数に基づいてこれらのインスタンスを作成します。以下のような何か:Java Reflection
public abstract class A {
public abstract int count();
}
public class B extends A {
public int count() {
//print 10;
}
}
public class C extends A {
public int count() {
//print 20;
}
}
私はメソッド数呼び出すために以下のコードを使用します。
- :私はJavaの反射に新しいですので、ここで、
String token; int i = 10; if (i == 10) //edit token = "B"; else token = "C"; A a; try { a = (A) (Class.forName("org.source."+token)).newInstance(); } catch (Exception e) { //print e } a.count();
は私の2つの質問です
私は上記の権利を行っていますか(編集:デフォルトのコンストラクタの場合)? (私ははいと推測しています)
デフォルトのコンストラクタ(パラメータなし)が呼び出された場合、上記は機能します。どのように私は引数を取るコンストラクタを持っている状況を処理するだろう。私はConstructor.newInstance()をどのように使用することができるかはわかりませんが、上記の状況で使用できます。
すべてのヘルプ感謝、何をやっている
if(1)は、Javaでは動作しません。また、クラスの "newInstance"は0-argコンストラクタでのみ動作します。したがって、このアプローチでは引数を必要とするコンストラクタを呼び出すことはできません。 – eternaln00b
達成しようとしていることを説明できますか?反射は、しばしば仕事のための適切なツールではありません。 – Vadim