私が指導している学生は、Dietel の Java に関する本を使用する Web 開発クラスを受講しています。この本には、ジェネリックに関する次の興味深いコードが含まれています。
class StackComposition <T>
{
private List<T> stackList;
public StackComposition()
{
stackList = new List<T>("stack") // ERROR
}
// .... more code
}
このコードが機能しない理由は明らかであり、インストラクターが学生にこのコードを開始点として使用することを推奨する理由について当惑しています。ジェネリックを理解していないだけで、Java のスキルが不足しているのかもしれませんが、ジェネリック型でジェネリック コレクションをインスタンス化する方法がわかりません。一般的な List コレクションを使用して実行時に型を決定することで Stack を作成することが意図されているようですが、上記の構成を使用してこれがどのように可能になるかはわかりません。私の最初の傾向は、ジェネリックStack<T>
オブジェクトを使用し、このカスタム Stack クラスを記述することを忘れるように学生に伝えることでしたが、どうやらそれは課題の目標ではないようです。
これを回避するためにパッケージを使用してテストを試みましたjava.lang.reflect
が、私が知る限り、これは次のような非汎用コンテナーでのみ機能しますArray
。
public StackComposition(Class<T> type)
{
Object obj = Array.newInstance(type, 10);
}