JavaのGenericsは面白いが、ちょっと凝ったことをすると実装に戸惑う。 たとえばjava.util.Collectionの#toArray()。 実際のJDKではtoArrayは Object[] toArray(); として実装されている。 Collectionインターフェースは interface Collection と宣言されているので、toArrayはGenericで指定されている型変数Eに対して E[] toArray(); として欲しいものだろう。 実際調べてみると、そのような間違いをしているblogを見かけたりもした。 引数を取る Object[] toArray(Object[] a); // J2SE 1.4 のほうは、 T[] toArray(T[] a); // J2SE 5.0 となり、String[] array = list.toArray(new S