Sim*_*erg 12 java eclipse lambda compiler-warnings java-8
在使用Lambdas和泛型时,我遇到了一个特殊情况,即不安全的强制转换警告.
在复制和制作SSCCE期间,我发现它可能与lambda在返回语句中有效"内部"的事实有关.
问题是:为什么我在warningUnnecessarySuppressWarnings方法中收到警告?.当卸下 @SuppressWarnings("unchecked"),我得到:
类型安全:未选中从列表到列表的强制转换
如warningUnsafeCast方法所示.因此,新警告说,注释不是必需的.
我正在使用Eclipse Kepler SP2 for Java EE Developers,Build 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();
});
}
Run Code Online (Sandbox Code Playgroud)
有问题的代码是类型不安全的,因此应该生成警告。@SuppressWarnings当然,注释对于抑制此警告是必要的。
这显然是 Eclipse Kepler SP2 中的一个错误,它对语句发出警告,但在@SuppressWarnings添加注释时警告这是不必要的。
@SuppressWarning解决方法是在 Eclipse 编译器配置中禁用“不必要的”警告。
| 归档时间: |
|
| 查看次数: |
1445 次 |
| 最近记录: |