Java 树映射泛型参数警告

Java 树映射泛型参数警告,java,generics,compiler-warnings,unchecked,Java,Generics,Compiler Warnings,Unchecked,第2行给出了这个错误: 类型安全性:类型TreeMap的表达式需要未经检查的转换 符合地图 我找到的解决方案是: 但是,简单地@suppressWarningUnchecked是否安全,或者是否存在代码失败的场景。更一般地说,什么时候可以安全地添加@SuppressWarningUnchecked?尝试在实例化树映射时指定树映射的泛型类型 Map<Date, Integer> m = new HashMap<Date, Integer>(); // line 1 Map&

第2行给出了这个错误:

类型安全性:类型TreeMap的表达式需要未经检查的转换 符合地图

我找到的解决方案是:


但是,简单地@suppressWarningUnchecked是否安全,或者是否存在代码失败的场景。更一般地说,什么时候可以安全地添加@SuppressWarningUnchecked?

尝试在实例化树映射时指定树映射的泛型类型

Map<Date, Integer> m = new HashMap<Date, Integer>(); // line 1
Map<Date, Integer> sMap = new TreeMap(m);            // line 2

这个答案假设您正在使用java.util.TreeMap。请参阅:

在实例化树映射时,尝试指定树映射的泛型类型

Map<Date, Integer> m = new HashMap<Date, Integer>(); // line 1
Map<Date, Integer> sMap = new TreeMap(m);            // line 2
这个答案假设您正在使用java.util.TreeMap。请参阅:

正确的方法是:

Map<Date, Integer> m = new HashMap<Date, Integer>(); // line 1
Map<Date, Integer> sMap = new TreeMap<Date,Integer>(m);
如果确定泛型类型,还可以取消选中警告。在这种情况下,您是。

正确的方法是:

Map<Date, Integer> m = new HashMap<Date, Integer>(); // line 1
Map<Date, Integer> sMap = new TreeMap<Date,Integer>(m);

如果确定泛型类型,还可以取消选中警告。在本例中,您是。

如前所述,向树映射添加泛型参数可以解决问题,因为编译器现在可以保证不会发生无效的强制转换。如果省略泛型参数,编译器将无法提供此保证,因此会警告您。那么,只有正确类型的对象存储在树映射中是您的责任

如果您确信只有正确的对象被放入树映射,那么您可以安全地忽略警告。如果失败,并且您在运行时遇到类强制转换异常,则这是您自己的错误:


一般来说,如果您取消了警告,您实际上忽略了编译器提示您的代码中可能存在问题。但编译器是哑的,在某些情况下,您可以放心地说不会发生任何问题,例如,您有其他检查或设计不允许错误发生。如果是这种情况,您可以抑制警告。

如前所述,向树映射添加泛型参数可以解决问题,因为编译器现在可以保证不会发生无效强制转换。如果省略泛型参数,编译器将无法提供此保证,因此会警告您。那么,只有正确类型的对象存储在树映射中是您的责任

如果您确信只有正确的对象被放入树映射,那么您可以安全地忽略警告。如果失败,并且您在运行时遇到类强制转换异常,则这是您自己的错误:


一般来说,如果您取消了警告,您实际上忽略了编译器提示您的代码中可能存在问题。但编译器是哑的,在某些情况下,您可以放心地说不会发生任何问题,例如,您有其他检查或设计不允许错误发生。如果是这种情况,则可以取消显示警告。

如果使用Java 7,则可以使用:


如果使用Java 7,则可以使用:


为什么不呢?TreeMapm?为什么不呢?TreeMapm?您正在使用java.util.TreeMap吗?它应该接受泛型类型。看:@JohnJohnGa每个人都没问题。很高兴我能提供帮助,这解决了您的问题吗?您正在使用java.util.TreeMap吗?它应该接受泛型类型。看:@JohnJohnGa每个人都没问题。很高兴我能帮忙,这解决了你的问题吗?