import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.List; interface J<A, B> extends T<A, B> { @Nullable @Override <C> U<C> foofoofoo(@NotNull List<? extends C> a, @Nullable A b, @NotNull U<B> c); } abstract class J1<X, Y> implements J<U<X>, U<Y>> { @Nullable @Override public <C> U<C> foofoofoo(@NotNull List<? extends C> xu, @Nullable U<X> yu, @NotNull U<U<Y>> c) { throw new UnsupportedOperationException(); } } abstract class J2<X> extends J1<X, String> { @Nullable @Override public <C> U<C> foofoofoo(@NotNull List<? extends C> xu, @Nullable U<X> stringU, @NotNull U<U<String>> c) { throw new UnsupportedOperationException(); } } class J3 extends J2<Object> { @Nullable @Override public <D> U<D> foofoofoo(@NotNull List<? extends D> objectU, @Nullable U<Object> stringU, @NotNull U<U<String>> c) { throw new UnsupportedOperationException(); } }