Ale*_*xSC 1 java-8 java-stream
鉴于代码:
public Statement methodCallByName(MethodDeclaration method, String string) {
List<ExpressionStatement> expressions = method.getBody().statements().stream()
.filter(s -> s instanceof ExpressionStatement)
.map(ExpressionStatement.class::cast)
.collect(Collectors.toList());
return null;
}
Run Code Online (Sandbox Code Playgroud)
我在Eclipse Oxygen中有以下错误:
请注意,根据JDT文档statements()返回a .List
怎么了?
问题是由statements()返回原始类型 引起的List(另请参阅什么是原始类型以及为什么我们不应该使用它?).
原始类型不仅可能引发未经检查的操作,还可能限制类型推断的适用性.
你可以解决它
public Statement methodCallByName(MethodDeclaration method, String string) {
List<?> statements = method.getBody().statements();
List<ExpressionStatement> expressions = statements.stream()
.filter(s -> s instanceof ExpressionStatement)
.map(ExpressionStatement.class::cast)
.collect(Collectors.toList());
// ...
return null;
}
Run Code Online (Sandbox Code Playgroud)
从原始类型List到未知元素类型列表的List<?>转换是我们可以在此处执行的唯一类型安全转换.既然你要检查并投射元素,那不是限制.
但请注意,您应该尽量保持一致.使用其中之一
.filter(s -> s instanceof ExpressionStatement)
.map(s -> (ExpressionStatement)s)
Run Code Online (Sandbox Code Playgroud)
要么
.filter(ExpressionStatement.class::isInstance)
.map(ExpressionStatement.class::cast)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
431 次 |
| 最近记录: |