如何泛型?不是对象
我的意图是将对象投射到(?)但是如何做到这一点? 我的代码:如何泛型?不是对象
Map<T,?> rawResult = initMap; final T key = ...
final Object kryoResult = kryo.readClassAndObject(input);
rawResult.put(key,value);
这使我以下错误
错误的第二个参数的类型。发现:'java.lang.Object',必需:'?'
演员不起作用:
(?)value
而且这样的:
final ? value = ...
是不是?一个东西?因为?是“什么......我不在乎?”?
回答:
因为?是“什么......我不在乎?”
这是不对的:?
是我不知道而不是我不在乎。这就是为什么你不能在地图上添加东西的原因。因为地图也可以容纳String
对象。因此添加一个Object
会导致错误。
Map<T, String> stringMap = new HashMap<>(); stringMap.put(key, "Value");
Map<T, ?> map = stringMap; // works
Object value = map.get(key); // Object, because "map" doesn't know the types its holding
map.put(key, "New Value"); // doesn't work, even though the map is holding stringValues
也看看this question其中详细介绍了通配符?
。
回答:
在这种情况下,如果声明接受?(unknown type)
并试图插入Object(known type)
,编译器无法确认被插入到列表中的对象的类型,并且会产生错误。
为了摆脱这种错误,我们需要使用助手方法,以便通过类型推断来捕获通配符。
Map<T, ?> map = new HashMap<>(); T key = ...;
Object value = ...;
putInMap(map, key, value);
和方法,把值映射:
@SuppressWarnings("unchecked") <K, V> void putInMap(Map<K, V> map, K key, Object value) {
map.put(key, (V) value);
}
基本上,当你想通过收集迭代或(如果对象不限定)上界类型映射?(unknown type)
使用。
您可能想要查看这里的文档https://docs.oracle.com/javase/tutorial/java/generics/wildcardGuidelines.html。
希望得到这个帮助。享受:)
以上是 如何泛型?不是对象 的全部内容, 来源链接: utcz.com/qa/261742.html