Непроверенный вызов 'forEach ()' в качестве члена необработанного типа 'java.lang.Iterable' - PullRequest
0 голосов
/ 05 ноября 2018

Я получаю это предупреждение компилятора. Это мой класс с использованным интерфейсом и методом (другие сотрудники пропущены):

public class Controller extends BaseController {

//interface
public interface MyInterface<T extends Iterable<? super T>> {
    List<T> getList();
}

//method call
updateJoinTable(request.getProductGrades().size(), instance::getProductGrades);

//method
private static void updateJoinTable(Integer LastValidElement, MyInterface myInterface) {
    myInterface.getList().subList(LastValidElement, myInterface.getList().size())
          .forEach(i ->myInterface.getList().remove(i));
}
}

Последняя часть с forEach вызывает предупреждение.

Теперь сначала код был без:

<T extends Iterable<? super T>>

но я видел много подобных случаев здесь, на SO, в основном с сопоставимыми, и, прочитав решения, я понял, что проблема в том, что мои универсальные типы связаны с типом, который сам по себе имеет тип, но у меня нет Он предоставлен, так что он сырой - тогда я добавил эту строку в интерфейс и ожидал, что предупреждение исчезнет. Но это все еще там. У вас есть идеи, что мне делать, чтобы избавиться от этого?

1 Ответ

0 голосов
/ 05 ноября 2018

Непосредственная проблема заключается в том, что MyInterface myInterface является необработанным типом. Сделайте это не необработанным, например:

private static void updateJoinTable(Integer LastValidElement, MyInterface<?> myInterface) {

Кроме того, вы можете захотеть не использовать forEach. Похоже, вы просто пытаетесь отрубить хвост списка:

List<?> list = myInterface.getList();
list.subList(LastValidelement, list.size()).clear();
...