Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用泛型类型执行强制转换时出现警告_Java_Generics - Fatal编程技术网

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,这是真的!我没有这样做的代码,所以我很想忽略它。