6

みなさん、こんにちは:)クラスで正しいコンストラクターを選択しようとしています。コードは次のとおりです。

Constructor[] constructors = targetClass.getConstructors();
Constructor goodConstructor = null;
for (Constructor constructor : constructors) {
    Class[] parameterTypes = constructor.getParameterTypes();
    if (parameterTypes.length = 1 && parameterTypes[0].equals(Map.class)) {//here
        goodConstructor = constructor;
    }
}

Map.classからに切り替えたいMap<String, String>.class。ジェネリックはコンパイル時のみのものであることを漠然と覚えているので、コンパイラが文句を言っているのはそのためです。クラスに適切なコンストラクターがあることを実行時に確認するにはどうすればよいですか?

よろしくお願いします

4

2 に答える 2

0

Java では、クラスはそのようには機能しません。クラスは実行時にパラメータ化できません。インスタンスのみ。Map.classMap の一般的な実装ごとに個別のクラス (想定しているように) ではなく、 は1 つだけです。次のコードは、これを明確にするのに役立つ場合があります。

    Map<String,String> m1 = new HashMap<>();
    Map<Object,Long> m2 = new HashMap<>();

    System.out.println(m1.getClass() == m2.getClass());//prints "true"
于 2013-04-17T15:33:16.013 に答える