Проблема вызвана 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;
}
Преобразование из необработанного типа List
в список неизвестных элементов типа List<?>
, это единственное безопасное преобразование типов, которое мы можем сделать здесь.Поскольку вы все равно будете проверять и разыгрывать элементы, это не ограничивает вас.
Но учтите, что вы должны стараться быть последовательными.Используйте
.filter(s -> s instanceof ExpressionStatement)
.map(s -> (ExpressionStatement)s)
или
.filter(ExpressionStatement.class::isInstance)
.map(ExpressionStatement.class::cast)