これは一般的な問題であればどこでも見つけるのは難しいですが、本質的にカスケード型の問題を扱っています。Javaの汎用型宣言の継承
public class Graph<E> {
private LinkedList<Node<E>> nodes;
public Graph() {
this.nodes = new LinkedList<>();
}
public E[] getNodes() {
ArrayList<E> list = new ArrayList<>();
for (Node<E> node : nodes)
list.add(node.getObject());
return list.toArray(new E[0]); // any way to make this line work?
}
// other important stuff
}
私はこのようなことをしたいと思いますが、このようにジェネリックアレイをインスタンス化することはできません。ここでgetNodes()はノード自体の内容ではなくノードの内容を返しますが、どのように把握できません。
私は、Graphジェネリックで定義されているNodeジェネリックは、Nodeクラスが常にGraphクラスと同じタイプであることを意味すると考えていました。そうじゃないの?
Nodeクラスは
public class Node<E> {
private LinkedList<Edge> edges;
private E obj;
public E getObject() {
return obj;
}
// other useful stuff
}
のような任意の助けをありがとうね!
EDIT:正しいタイプの返された配列を作成する必要があります。ジェネリック型の割り当てを持つArrayListからArrayを取得する方法はありますか?
可能であれば、 'ArrayList'はそれをしたと思いませんか? – shmosel
これは私が抱えている問題の一般的なバージョンです。今は、新しい機能は追加しないが、実際のコードは追加するので、カスタムクラスの作成には何の意味もありません。私が知る限り、私はこのタイプの実装が必要な方法を見つけることができません。 – user3785637
'ArrayList'は何をしますか?' public T [] getThings(T [] a){戻り値things.toArray(a); } ' –
shmosel