ジェネリクスとスーパークラス
class A<T> に対し
1: class B extends A はOK
2: class B extends A<T>はエラー
3: class B extends A<String>はOK
4: class B<T> extends A<T> はOK
5: class B<T> extends A<String> はOK
class A[T] に対し
1: class B extends A はOK
2: class B extends A[T]はエラー
3: class B extends A[String]はOK
4: class B[T] extends A[T] はOK
5: class B[T] extends A[String]はOK
class A<T> に対し
1: class B: A はエラー
2: class B: A<T> はエラー
3: class B: A<String> はOK
4: class B<T>: A<T> はOK
5: class B<T>: A<String>はOK
class A(T) に対し
1: class B: A はエラー
2: class B: A(T) はエラー
3: class B: A(String) はOK
4: class B(T): A(T) はOK
5: class B(T): A(String)はOK
雑感
1:が許されるかどうかが言語によって違う
Swift/Crystalはだめ。まあ4:みたいに書けってことかも
順序入れ替え問題
class A<X, Y>があるとき、以下は似てるようで全然違う
class B<S, T> extends A<S, T>
class B<S, T> extends A<T, S>