在与兰布达和仿制药一起工作时,遇到了一个不安全的投射警告的特殊情况.
在复制和制作SSCCE期间,我发现这可能与lambda实际上是“返回”语句有关.
问题是:为什么在warningUnecessarySuppressWarnings方法中收到警告?删除@SuppressWarnings(“unchecked”)时,我得到:
Type safety: Unchecked cast from List to List
如warningUnsafeCast方法所示.因此,新的警告说,注释不是没有必要的.
我正在使用Eclipse Kepler SP2作为Java EE开发人员,Build ID为:20140224-0627
public static void main(String[] args) {
System.out.println(warningUnnecessarySuppressWarnings());
System.out.println(warningUnsafeCast());
System.out.println(withoutWarning());
}
private static Integer perform(Function, Integer> func) {
return func.apply(Arrays.asList("a", "b", "c"));
}
private static Integer warningUnnecessarySuppressWarnings() {
return perform(list -> {
@SuppressWarnings("unchecked") // Unnecessary @SuppressWarnings("unchecked")
List unsafeCast = (List) list;
return unsafeCast.size();
});
}
private static Integer warningUnsafeCast() {
return perform(list -> {
List unsafeCast = (List) list; // Type safety: Unchecked cast from List to List
return unsafeCast.size();
});
}
@SuppressWarnings("unchecked")
private static Integer withoutWarning() {
return perform(list -> {
List unsafeCast = (List) list;
return unsafeCast.size();
});
}