我进行了广泛的研究,似乎找不到这种情况的最佳实践。
ArrayList<GenericObject<?>> list = new ArrayList<>();
list.add( new GenericObject<Integer>(6) ); // Autoboxing
list.add( new GenericObject<String>("HI") );
if(list.get( 0 ).getGenaricValue().getClass() == Integer.class){
GenericObject<Integer> gi = (GenericObject<Integer>) list.get( 0 );
System.out.println("Was Integer");
System.out.println(gi);
}
}
尽管这段代码可以工作,但是从GenericObject 到GenericObject的强制转换会导致未经检查的警告。现在您可以看到,我已经使用了if语句明确检查了类型,因此我并不担心异常,但是有没有更好的方法在不必抑制未经检查的警告的情况下完成这个操作呢?在这种情况下有最佳实践吗? 我已经阅读了完整的Generics Oracle教程 here ,也阅读了许多stackoverflow帖子,但似乎没有一个能够解决这个问题。任何帮助都将不胜感激。谢谢。
Integer
并不意味着它必须是GenericObject<Integer>
,它也可以是GenericObject<Number>
(因此允许某些方法用Double
替换“装箱”的Integer
)。 - mihiGenericObject<T>
接受另一个Class<T>
作为参数并存储它,然后有一个静态辅助转换方法(抑制未检查的警告),该方法接受GenericObject<?>
和Class<T>
并在验证存储的Class<T>
值后将其转换为GenericObject<T>
。 - mihi