1) extends が受け入れられているのに、ジェネリックメソッドとクラスが super キーワードを使用しないのはなぜですか?
2)型消去のため、ジェネリックで演算子のインスタンスを使用できませんが、なぜ型キャストが許可されるのですか?
例えば:
if (objecta instanceof Object){} //doesn't work
Collection collection = new ArrayList();
Collection<Integer> d1 = (Collection<Integer>)collection; //works fine.
私の理解では、それを Collection にキャストしようとしていて、実行時に Collection として何もないため、そうすべきではありません。
3)静的変数はジェネリッククラスのメンバーになれないことを読みましたが、その理由はよくわかりません。では、なぜ次の動作が示されるのでしょうか。
public class NoGenericss
{ static List<Integer> list; //WORKS FINE
static List<T> list1; //COMPILATION ERROR
public class Genericss<T>
{ static List<Integer> list; //WORKS FINE
static List<T> list1; //COMPILATION ERROR
static void meth(T t){} //COMPILATION ERROR
static <S> void meth(S t){} //WORKS FINE
なぜこのような変化する行動が示されるのでしょうか?