如何泛型?不是对象

我的意图是将对象投射到(?)但是如何做到这一点? 我的代码:如何泛型?不是对象

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

回到顶部