gpt4 book ai didi

java - 使用泛型执行强制转换时发出警告

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:14:45 29 4
gpt4 key购买 nike

我不明白为什么我在尝试执行此操作时会收到警告(未经检查的转换):

...
Map<? estends SomeType, SomeOtherType> map;
...
Map<SomeType, SomeOtherType> castedMap = (Map<SomeType, SomeOtherType>) map;
...

我的意思是将 castedMap 发布到外部代码有什么危险?这两个操作将在运行时完美运行:

  • 使用 SomeType 类型的键从 castedMap 获取元素
  • 使用 SomeType 类型的键将元素放入 castedMap 中。

我会使用@SuppressWarnings("unchecked") 简单地抑制警告。

最佳答案

答案可能很无聊:当有警告时,它就不是类型安全的。就是这样。

为什么它不是类型安全的可以在这个例子中看到:

import java.util.HashMap;
import java.util.Map;

class SomeType {}
class SomeSubType extends SomeType {}
class SomeOtherType {}

public class CastWarning
{
public static void main(String[] args)
{
Map<SomeSubType, SomeOtherType> originalMap = new HashMap<SomeSubType, SomeOtherType>();
Map<? extends SomeType, SomeOtherType> map = originalMap;
Map<SomeType, SomeOtherType> castedMap = (Map<SomeType, SomeOtherType>) map;

// Valid because of the cast: The information that the
// key of the map is not "SomeType" but "SomeSubType"
// has been cast away...
SomeType someType = new SomeType();
SomeOtherType someOtherType = new SomeOtherType();
castedMap.put(someType, someOtherType);

// Valid for itself, but causes a ClassCastException
// due to the unchecked cast of the map
SomeSubType someSubType = originalMap.keySet().iterator().next();
}
}

关于java - 使用泛型执行强制转换时发出警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22192809/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com