Есть ли способ использовать внешние аннотации Eclipse для общих параметров класса? - PullRequest
0 голосов
/ 30 октября 2018

Я хотел бы аннотировать класс HasComponents Ваадина, который расширяет Iterable. Я могу аннотировать итератор () - Метод, подобный этому:

class com/vaadin/ui/HasComponents
iterator
 ()Ljava/util/Iterator<Lcom/vaadin/ui/Component;>;
 ()L1java/util/Iterator<L1com/vaadin/ui/Component;>;

, чтобы я мог выполнять итерацию с классическим циклом for

for (Iterator<Component> it = content.iterator(); it.hasNext();) {
  Component c = it.next();
  doSmoething(c);
}

но когда я пытаюсь использовать цикл foreach, такой как

for(Component c : content) {
  doSomething(c);
}

Я получаю предупреждение от Eclipse:

Null type safety (type annotations): The expression of type 'Component' needs unchecked conversion to conform to '@NonNull Component'

предположительно, потому что это должно быть

HasComponents extends Component, Iterable<@NonNull Component> 

Есть ли способ добавить эту аннотацию с помощью внешних аннотаций или есть другой способ?

1 Ответ

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

Если вашей конечной целью является создание короткой руки для цикла, и вы используете Java 8 или новее, вы можете использовать forEach (..) с HasComponents следующим образом, используя Streams и Lambda:

layout.forEach(component -> { ... do something with component ... });
...