Java 使用泛型类型执行强制转换时出现警告
我不明白为什么我在尝试执行此操作时会收到警告(未选中强制转换):Java 使用泛型类型执行强制转换时出现警告,java,generics,Java,Generics,我不明白为什么我在尝试执行此操作时会收到警告(未选中强制转换): ... Map<? estends SomeType, SomeOtherType> map; ... Map<SomeType, SomeOtherType> castedMap = (Map<SomeType, SomeOtherType>) map; ... 。。。 Map答案可能很无聊:如果有警告,那么它就不是类型安全的。就这样 在本例中可以看出它不是类型安全的原因: import j
...
Map<? estends SomeType, SomeOtherType> map;
...
Map<SomeType, SomeOtherType> castedMap = (Map<SomeType, SomeOtherType>) map;
...
。。。
Map答案可能很无聊:如果有警告,那么它就不是类型安全的。就这样
在本例中可以看出它不是类型安全的原因:
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();
}
}
import java.util.HashMap;
导入java.util.Map;
类SomeType{}
类SomeSubType扩展了SomeType{}
类SomeOtherType{}
公共级别警告
{
公共静态void main(字符串[]args)
{
Map originalMap=new HashMap();
MapIndeed,这是真的!我没有这样做的代码,所以我很想忽略它。