Java 8 在Java8中,如何在具有流的列表实例中强制转换元素?
鉴于代码:Java 8 在Java8中,如何在具有流的列表实例中强制转换元素?,java-8,java-stream,Java 8,Java Stream,鉴于代码: public Statement methodCallByName(MethodDeclaration method, String string) { List<ExpressionStatement> expressions = method.getBody().statements().stream() .filter(s -> s instanceof E
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;
}
公共语句methodCallByName(MethodDeclaration方法,String){
列表表达式=方法.getBody().statements().stream()
.filter(s->s ExpressionStatement实例)
.map(ExpressionStatement.class::cast)
.collect(Collectors.toList());
返回null;
}
Eclipse Oxygen中有以下错误:
请注意,statements()
根据返回一个列表
有什么问题吗?问题是由语句()
返回原始类型列表引起的(另请参见)
原始类型不仅可能引发未检查的操作,而且还限制了类型推断的适用性
你可以用它来修理
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;
}
或
您是否尝试过javac
?这是标准问题statements()
返回原始类型列表
,因此,泛型的所有优点在该点之后都被禁用。
.filter(s -> s instanceof ExpressionStatement)
.map(s -> (ExpressionStatement)s)
.filter(ExpressionStatement.class::isInstance)
.map(ExpressionStatement.class::cast)