Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/382.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 - Fatal编程技术网

如何在java中强制转换泛型列表?

如何在java中强制转换泛型列表?,java,Java,有没有一种方法不需要使用@suppressWarningUnchecked就可以做到这一点 如果你想写地图,简短的回答是否定的。你可以按照@brso05所提到的例子来编码,但我认为这是违背目的的。基本上,编译器告诉您它不能确保映射中的类型是兼容的 如果您不必写入该映射,您可以使用映射,这意味着您只能从该映射中获取Object类型的项。例如: Map untypedMap = new HashMap(); Map<?, ?> map = untypedMap; Object someV

有没有一种方法不需要使用@suppressWarningUnchecked就可以做到这一点


如果你想写地图,简短的回答是否定的。你可以按照@brso05所提到的例子来编码,但我认为这是违背目的的。基本上,编译器告诉您它不能确保映射中的类型是兼容的

如果您不必写入该映射,您可以使用映射,这意味着您只能从该映射中获取Object类型的项。例如:

Map untypedMap = new HashMap();
Map<?, ?> map = untypedMap;
Object someValue = map.get(aKey);
List untyped = new ArrayList();
List<Integer> integers = untyped; // warning here
integers.add(1);
List<Float> floats = untyped; // warning here
floats.add(1.4f);
这将改变原始整数列表,并为其添加浮点。浮动是一个对象,因此它会根据列表进行类型检查

现在,由于向后兼容性,如果列表是非类型化的,这种类型的赋值是可能的。例如:

Map untypedMap = new HashMap();
Map<?, ?> map = untypedMap;
Object someValue = map.get(aKey);
List untyped = new ArrayList();
List<Integer> integers = untyped; // warning here
integers.add(1);
List<Float> floats = untyped; // warning here
floats.add(1.4f);

由于上述原因,每当您将非类型化集合分配给类型化集合时,编译器都会发出警告。

在其他哪些情况下,您不希望o成为映射?请查看此链接,我不会在使用Eclipse时收到未经检查的警告…以防仅使用映射不会向我发出警告。另外请注意,运行时不会保留任何通用参数信息。例如,你可以在没有问题的情况下执行o instanceof Map,但是执行o instanceof Map会给你一个错误。有些事情告诉我,如果你从全局来看,这是一种完全不同的方式。作为一个整体,你能分享更多你想做的事情吗?
List untyped = new ArrayList();
List<Integer> integers = untyped; // warning here
integers.add(1);
List<Float> floats = untyped; // warning here
floats.add(1.4f);
System.out.println(untyped.get(0)); // is okay
System.out.println(untyped.get(1)); // is okay

Float aFloat = floats.get(0);// compiles, but throws ClassCastException
System.out.println(aFloat);
Integer anInteger = integers.get(1);// compiles, but ClassCastException
System.out.println(anInteger);