0

同じクラス名の別のJavaパッケージがあります。

pkg_1.operation;
pkg_2.operation;
pkg_3.operation;
.
.
.
pkg_n.operation;

各パッケージからメソッド Operation を呼び出したいクラス名 test を作ります。ハードコーディングを避けるためにループを使用したい。お気に入り

for(i=0;i< n;i++)
{
    pkg_i.opeartion obj=new pkg_i.operation();
    string output = obj.oper(5); //oper is the method name
}

しかし、それを簡単に行う方法が見つかりません。簡単にできる方法を教えてください。それ以外の場合、50 個のパッケージがある場合、インスタンス化で 50 個のパッケージのコードを作成する必要があります。あなたのアドバイスを待っています。ありがとう

4

2 に答える 2

4

リフレクションを使用できます-

Class<?> clazz = Class.forName("pkg_" + i + ".operation");
Object obj = clazz.newInstance();
String output = clazz.getMethod("oper").invoke(obj, 5);

しかし... 通常はそうすべきではなく、それは悪い設計の兆候です。代わりに、インターフェースとその複数の実装を、おそらくファクトリーとともに使用してください。

また、Java 命名規則に従っていません。

于 2013-06-12T09:02:13.597 に答える
1

リフレクションの使用:

for (int i = 0; i < n ; i++) {
    Class<?> clazz = Class.forName("pkg_" + i + ".operation");
    Object object = clazz.newInstance();
    String output = ((Operation) object).oper();
}

すべてのクラスに共通のOperationインターフェースがあると仮定します。それ以外の場合は、Reflection を再度使用する必要があります。

clazz.getMethod("oper", Integer.class).invoke(object, 5);
于 2013-06-12T09:05:37.023 に答える