T
が として定義されていないと仮定すると<T extends NotObject>
、
T[] arrayVar =(T[]) new Object[1]// it causes a compiler warning but still okay
投稿消去は
Object[] arrayVar = (Object[]) new Object[1];
冗長なチェックされていないキャストがあります。
これは型安全ではありません。
したときにどうなるかを考える
f(arrayVar)
どこ
void f(Object[] out) { out[0] = "A string"; }
String
がのサブクラスではないときにそれが発生する可能性がある場合T
は、タイプ セーフ違反があります。
この問題を解決するには、より具体的なタイプの配列を作成してみてください。タイプのパラメーターを取得できる場合
Class<T> clazz
次に、このように配列を作成できます
T[] varArray = (T[]) Array.newInstance(clazz, 1);
やろうとしているので、これはより型安全です
out[0] = "";
Number[]
たとえばon aはArrayStoreException
at runtime になります。
これは完全に (動的に) タイプ セーフではありませT
ん。List<String>
List<Number>
List[]
ArrayStoreException