Java : Class wrapper using generic

标签 java generics typechecking

我会以某种方式在 HashMap 中存储许多不同的类型,但在某种程度上,当我提取它们时,它们将是良好类型的(而不是对象)。

所以我考虑一个使用泛型的包装器

 public class Value <T>
 {
     private T innerValue ;

     public Value ( T _value )
     {
         innerValue = _value ;
     }

     public T read ()
     {
         return innerValue ;
     }
 }

但它不起作用,对于我所做的测试:

 Value <Integer> va = new Value <Integer> ( 1 ) ;
 Value vc = va ;
 int restA = vc.read();

但我收到设计时错误,因为 vc.read() 将返回 Object() 而不是 Integer。 那么我应该怎么做才能避免这种行为呢? (如果可能的话,我希望有一个解决方案可以防止“va”丢失有关 T 的信息,而不是其他解决方法)

预先感谢您的帮助。

最佳答案

您将 va 转换为原始 Valuevc。当您使用类的原始形式时,您的 T 泛型类型参数将被 Object 替换。因此,您不能将 Object 分配给 int

如果您只调用va.read(),那么它将返回一个Integer,在赋值时它将被拆箱为intrestA

关于Java : Class wrapper using generic,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21393371/

相关文章:

C# 通用类的模式匹配属性?

list - 在 ANTLR 中返回列表以进行类型检查,语言 java

python - 如何对 mypy 中从 NamedTuple 继承的类的方法实现类型检查?

java - MLKit BarCode Sanner Implementation 在执行 ML Kit 任务时导致内部错误

java - 错误 : ArrayOutOfBounds. 如何解决?

c# - 当调用递归泛型接口(interface)上的扩展方法时,结构实例是否会被装箱?

c# - 即使枚举类型被密封,foreach 也不会进行类型检查

java - Java中可以通过反射创建可变数量且变量名递增的变量吗?

java - 将 jQuery 文件与 Spring MVC 链接

c# - 复杂泛型中的无效方差