効果的なJavaアイテム26から ジェネリック型を優先
他のすべての条件が同じであれば、スカラー型よりも配列型へのチェックされていないキャストを抑制する方がリスクが高く、2番目の解決策が提案されます。ただし、Stackよりも現実的なジェネリッククラスでは、コード内の多くのポイントで配列から読み取る可能性があるため、2番目のソリューションを選択するには、E []への単一のキャストではなく、Eへの多数のキャストが必要になります。最初のソリューションがより一般的に使用されます[Naftalin07、6.7]。
著者はここで何を意味し、scalar type
彼はここで何を伝えようとしているのですか?オプション2よりも危険と見なされるオプション1は何ですか?
コード :
// The elements array will contain only E instances from push(E).
// This is sufficient to ensure type safety, but the runtime
// type of the array won't be E[]; it will always be Object[]!
@SuppressWarnings("unchecked")
public Stack() {
elements = (E[]) new Object[DEFAULT_INITIAL_CAPACITY];
}
VS
// Appropriate suppression of unchecked warning
public E pop() {
if (size == 0)
throw new EmptyStackException();
// push requires elements to be of type E, so cast is correct
@SuppressWarnings("unchecked") E result =
(E) elements[--size];
elements[size] = null; // Eliminate obsolete reference
return result;
}