代わりgetGenericParameterTypes()
使用する:あなたは、それはもはや一致しませんMap<String, Integer>
を取るためにMyClass()
を変更した場合、今
public class FindConstructor {
public static void main(String[] args) throws IOException {
for (Constructor<?> constructor : MyClass.class.getConstructors()) {
Type[] parameterTypes = constructor.getGenericParameterTypes();
if (parameterTypes.length == 1 && parameterTypes[0] instanceof ParameterizedType) {
ParameterizedType parameterizedArg = (ParameterizedType) parameterTypes[0];
if (parameterizedArg.getRawType() != Map.class) {
continue;
}
if (parameterizedArg.getActualTypeArguments()[0] != String.class) {
continue;
}
if (parameterizedArg.getActualTypeArguments()[1] != String.class) {
continue;
}
}
System.out.println("found constructor " + constructor);
}
}
}
class MyClass {
public MyClass(Map<String, String> map) {
}
}
を。
GuavaのTypeToken
では、匿名クラスを使用してパラメータ化されたType
を作成して比較することができます。
Type mapStringString = new TypeToken<Map<String, String>>(){}.getType();
for (Constructor<?> constructor : MyClass.class.getConstructors()) {
Type[] parameterTypes = constructor.getGenericParameterTypes();
if (parameterTypes.length == 1 && parameterTypes[0].equals(mapStringString)) {
System.out.println("found constructor " + constructor);
}
}
私の答えを削除しました。 「ジェネリック使用型消去」の回答で返事をする前に、もっと慎重にしなければならない!私は、あなたがこれをやっているなら、あなたのデザインに間違いがあると確信しています! :) – James