私はNode<E>
という汎用クラスを持っていますが、このタイプのオブジェクトの配列を返す静的メソッドを定義しようとしています。私はJavaがクラス内でジェネリック型の配列の作成を許可しないので、オブジェクト配列を作成してジェネリック型をオブジェクトに渡す必要があることを理解しています。コードの例についてはオブジェクト内の汎用クラスの呼び出しメソッド[]配列
、のようにそれを定義してみましょう:内のオブジェクトに、このクラスのメソッドを実行
- :私はこのコードを実装するとき、私はすることはできませんよ
public static Object[] returnArray() { Object[] output; //code which adds Node<E> to output return output;
それらの型の配列
Object
Node<E>
のメソッドが.getVal()
の場合、次のコードはエラーになります。012Object[] nodes = Node.returnArray(head); nodes[0].getVal();
Node<E>[]
配列へのキャストとリターン方式の配列、場合でも、タイプの明示。Node<Integer>[] nodes = (Node<Integer>[]) Node.returnArray(head);
だから私は現在、各ノードのメソッドにアクセスしています唯一の方法は、鋳造によって変数に割り当てることである:
Object[] nodes = Node.returnArray(head);
Node<Integer> returned1 = (Node<Integer>) nodes[0];
Node<Integer> returned2 = (Node<Integer>) nodes[1];
しかし、あなたはどのように見ることができますコードが大きくなると冗長になります。配列に渡される汎用オブジェクトにアクセスするには、より良い方法がありますか?
'E'の配列や' Node 'の配列を作ることはできませんが、確かに' Node'の配列を作ることができます。 –
user2357112
また、代わりにListを作成するほうがよいでしょう。あなたがリストを使うことができるだけであれば、ジェネリックとアレイを連携させようという頭痛に対処することはできません。 – user2357112
'Node'の配列を作成し、それを' Node [] 'にキャストし、あなたのメソッドに警告抑制を追加することができます。確かにそれが本当に 'E'(多くの場合、難しくない)であることを確認するあなたの処分だと確信しています。 –
HuStmpHrrr