我有一个通用类Class1
即让我们想到以下代码
Map<String, Class1> map;
map.put("1", Class1<String, Integer> obj1);
map.put("2", Class1<String, Double> obj2);
map.put("3", Class1<Integer, Double> obj3);
现在当我遍历地图时...我能以某种方式获得每个Class1对象的类型(K,V)吗?
答案 0 :(得分:1)
根据JVM规范,这是不可能的。
泛型类型仅在编译时可用。在运行时只有Object
。
您只有2种选择:
List<Object>
以及其他集合(如果不为空),您可以从中获取一项并获得item.getClass()
。建议。购买方式,您的方法不能解决此问题。您可以实现如下接口:
interface TypeConverter {
boolean isValid(String str); // call it before to check if current converter valid for required transform or not
Class1 converts(String str); // call it to convert
}
对于每种必需的类型,您必须创建单独的转换器(这是“策略模式”)。您的最终代码可能如下所示:
final TypeConverter converters = new ArrayList<>();
converters.add(new OneTypeConverter());
converters.add(new TwoTypeConverter());
public static Class1 convert(String str) {
for(TypeConverter convereter : converters)
if(converter.isValid(str))
return converter.convert(str);
throw new RuntimeException("No suitable converter found");
}