ジェネリクス・ヘルにようこそ!

Java の Use-Site Variance のみなGenerics の辛み
0
W @Wmikefish

ジェネリクスむずかしいです><

2015-12-04 01:34:38
W @Wmikefish

private static <E> Set<E> union(Set<? extends E> s1, Set<? extends E> s2) この宣言とかなあ

2015-12-04 01:35:29
W @Wmikefish

private static <T extends Comparable<? super T>> T max(List<? extends T> list) んんん

2015-12-04 01:37:48
W @Wmikefish

上限ワイルドカードの中に下限ワイルドカードが入っててこれもうわかんねえな

2015-12-04 01:38:50
W @Wmikefish

ワイルドカードキャプチャさくらは、ジェネリクスの複雑な実装をユーザから遠ざけるためにあると

2015-12-04 01:46:19
W @Wmikefish

List系のリファレンスだけじゃなくてソースも読んでジェネリクスの理解深めるかあ(こんど)

2015-12-04 02:20:40
なぎせ ゆうき @nagise

ジェネリクスの理解、ソースを読んでも深まらない感ある

2015-12-04 10:27:46
なぎせ ゆうき @nagise

宣言の事例は見つかるだろうけど、ソースからその宣言の理由を見出すのは難しいのでは

2015-12-04 10:28:29
なぎせ ゆうき @nagise

たとえば class A implements Compareable<A> という自然順序付けされたクラスAがあったとして、継承してclass B extends A としたとする。 ここでクラスBはCompareable<A>である。<B>ではなく<A>だ

2015-12-04 10:37:35
なぎせ ゆうき @nagise

なのでT extends Comparable<T>としてしまうと、先のクラスBは型が合致しない… のだが、一般的な変数は共変性があって、子のクラスは親の型に暗黙に変換可能とされるので事態が複雑怪奇になる。 かつ、ジェネリクスの<>内は非変性で変性が異なるので…

2015-12-04 10:45:07
なぎせ ゆうき @nagise

ジェネリクス・ヘルにようこそ!

2015-12-04 10:45:28