在使用Lambda和泛型时,我遇到了不安全强制转换警告的特殊情况。
在复制和制作SSCCE期间,我发现这可能与以下事实有关:lambda实际上位于return语句内部。
问题是:为什么我会在该warningUnnecessarySuppressWarnings
方法中收到警告?。当卸下 @SuppressWarnings("unchecked")
,我得到:
类型安全:从列表到列表的未经检查的转换
如warningUnsafeCast
方法所示。因此,不必像新警告那样注释。
我正在为Java EE开发人员使用Eclipse Kepler SP2,内部版本ID:20140224-0627
还在Eclipse Kepler中使用推荐的Java 8支持更新站点
public static void main(String[] args) {
System.out.println(warningUnnecessarySuppressWarnings());
System.out.println(warningUnsafeCast());
System.out.println(withoutWarning());
}
private static Integer perform(Function<List<?>, Integer> func) {
return func.apply(Arrays.asList("a", "b", "c"));
}
private static Integer warningUnnecessarySuppressWarnings() {
return perform(list -> {
@SuppressWarnings("unchecked") // Unnecessary @SuppressWarnings("unchecked")
List<String> unsafeCast = (List<String>) list;
return unsafeCast.size();
});
}
private static Integer warningUnsafeCast() {
return perform(list -> {
List<String> unsafeCast = (List<String>) list; // Type safety: Unchecked cast from List<capture#4-of ?> to List<String>
return unsafeCast.size();
});
}
@SuppressWarnings("unchecked")
private static Integer withoutWarning() {
return perform(list -> {
List<String> unsafeCast = (List<String>) list;
return unsafeCast.size();
});
}
有问题的代码是类型不安全的,因此应生成警告。该@SuppressWarnings
注解当然需要抑制此警告。
Eclipse Kepler SP2中的一个错误显然是它发出了对该语句的警告,但是随后@SuppressWarnings
在添加注释时发出了警告,警告该错误。
解决方法是@SuppressWarning
在Eclipse编译器配置中禁用“不必要的”警告。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句