java – 在运行时检查类是否具有使用泛型的特定构造函数
发布时间:2020-12-14 05:55:15 所属栏目:Java 来源:网络整理
导读:大家好:)我正在尝试在类中选择正确的构造函数.这是代码: Constructor[] constructors = targetClass.getConstructors();Constructor goodConstructor = null;for (Constructor constructor : constructors) { Class[] parameterTypes = constructor.getPara
大家好:)我正在尝试在类中选择正确的构造函数.这是代码:
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.我依稀记得泛型仅用于编译时,所以这就是编译器抱怨的原因.如何在运行时检查该类是否具有正确的构造函数? 最好的祝福 解决方法
您想使用getGenericParameterTypes()代替:
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) { } } 现在,如果您更改MyClass()以获取Map< String,Integer>它将不再匹配. 使用Guava的 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); } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |