Ваши ожидания не соответствуют требованиям спецификации. Из спецификации (стр. 27 в PDF-файле) :
Для данного интерфейса Z ограничения, помеченные как принадлежащие к группе Z (то есть там, где группы элементов аннотации содержат интерфейс Z) или любой из суперинтерфейсов Z (унаследованные группы), считаются частью группы Z.
Другими словами, если вы проверили с помощью Section1.class
и пометили @NotNull
с помощью All.class
, ограничение будет применено. Но не наоборот.
Думайте об этом как о наборе: All
- это общий набор ограничений, и при расширении All
Section1
становится надмножеством All
, а не подмножеством. Таким образом, когда вы проверяете с помощью All
, он применяет только те, которые указаны в All
и его супер-интерфейсах.
Если вы хотите, чтобы All
был надмножеством ограничений, найденных в Section1
, вам нужно перевернуть наследование:
interface All extends Section1 /*, Section2, Section3...*/ {}
В этом смысле вы можете сказать себе, что All
наследует все ограничения Section1
.
Это также разумная реализация, поскольку в Java чрезвычайно сложно выяснить, кто расширяет определенный интерфейс (в конце концов, файл класса может быть даже недоступен, пока на него не будет ссылаться), но тривиально легко увидеть интерфейсы, которые расширяет данный интерфейс. .
person
Mark Peters
schedule
19.03.2012