[英]Pass a generic class in method parameter
我有一个方法,它接受两个值并将其转换为 map 的键值对并将其返回给调用方法。 键始终是字符串,但值可以是任何 Class。 在接受方法签名时,我似乎无法将值转换为泛型。 这是我的代码:
private Map<String, Class<T>> mapBuilder(String key, T value) {
Map<String, Class <T>> map = new HashMap<>();
map.put(key, value);
return map;
}
有人可以告诉我们可以做什么吗?
Class
太多了。 T
已经指的是类型:
private <T> Map<String, T> mapBuilder(String key, T value) {
Map<String, T> map = new HashMap<>();
map.put(key, value);
return map;
}
Class<T>
将引用T
的类对象
您确定要使用 map 和Class
作为值吗? 如果是这样,您首先在 class 级别( public class MyClass <T> {... }
或在方法级别定义了一个泛型类型参数<T>
:
private <T> Map<String, Class<T>> mapBuilder(String key, T value) {
Map<String, Class <T>> map = new HashMap<>();
map.put(key, (Class<T>) value.getClass());
return map;
}
请注意以下事项:
Class<T>
的实例作为值添加到 map 中,您必须从T
object 中获取它。getClass
返回Class<?>
,类型不兼容就会出现问题,因此需要显式转换(也在上面的代码段中)。最后,我更喜欢带有通配符参数的解决方案:
private Map<String, Class<?>> mapBuilder(String key, T value) {
Map<String, Class <?>> map = new HashMap<>();
map.put(key, value.getClass());
return map;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.