繁体   English   中英

在方法参数中传递通用 class

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM