import typeUse.*; import java.util.*; abstract class Parent { abstract @NotNull String @NotNull [] getStrings(); abstract @NotNull List<@NotNull String> getStringList(); abstract void foo(@Nullable String @NotNull [] p1, @NotNull List<@Nullable String> p2); } class Child extends Parent { @Override @Nullable String @NotNull [] getStrings() { throw new UnsupportedOperationException(); } @Override @NotNull List<@Nullable String> getStringList() { throw new UnsupportedOperationException(); } void foo(@NotNull String @NotNull [] p1, @NotNull List<@NotNull String> p2) { } }