型が合ったぁぁ
id:ashigeruさんからツッコミを貰いましてん。
つまり、こういう事らしい。
public interface A<L, R> { B<L, R> b(); List<? extends B<L, R>> nestedb(); } public interface NumberedA extends A<Integer, Long> { NumberedB b(); List<NumberedB> nestedb(); }
そう、このNumberedAがやりたかった。
で、呼び出す側のコードはこんな感じ
public class Main { public void main(String[] args) { NumberedA np = null; NumberedB kids = np.b(); B<Integer, Long> kids2 = np.b(); List<NumberedB> fs2 = np.nestedb(); List<? extends B<Integer, Long>> fs = np.nestedb(); } }
結局の所、
List<B<L, R>>
と
List<? extends B<L, R>>
には、明確な違いがあるって事らしい。
ぐぬ…よく分らんぞ。
もっかい、ちゃんとコンパイルが通るコード。
public interface A<L, R> { B<L, R> b(); List<? extends B<L, R>> nestedb(); } public interface NumberedA extends A<Integer, Long> { NumberedB b(); List<NumberedB> nestedb(); }
b()は問題ナシ。nestedb()は、何で? extends B
うう…