2012-03-08 10 views
0

だから私はどのように多くの要素を知らなくても、リストのすべての要素を抽象構文木に追加するには?

public abstract class ASTreeNode implements Iterable<ASTreeNode>{ 

protected List<ASTreeNode> children; 

protected ASTreeNode(){ 
    children = new LinkedList<ASTreeNode>(); 
} 

protected ASTreeNode(ASTreeNode... children){ 
    this(); 
    for(ASTreeNode c: children) 
{ 
    this.addChild(c); 
} 

(ここではその一部です)AbstractSyntaxTreeNode.javaクラスを持っている。そして、私はASTreeNode

私は、オブジェクトのTさんの全てを投げるにはどうすればよい
public class Operation extends ASTreeNode 
{ 
    char s; 

    private Operation(Term t) 
    { 
    //QUESTION REGARDING THIS PART 
    super(t, t.getChild(0), t.getChild(1)); 
    } 
} 

を拡張する他のクラスの操作を持っています(これはASTreeNodeを継承しています)の子どもをsuper ctorの引数に変換しますか?それをハードコーディングしないと?私はsuper(t、t.children)を試みましたが、コンストラクタは引数でListを取らず、ASTreeNodes だけが取得されます。

ああ、これは

public class Term extends ASTreeNode 
{ 
    char symbol; 

private Term(Factor f) 
{ 
    super(f, f.getChild(0)); 
} 
} 

クラス用語であり、それは引数だとして一覧です受け入れるASTreeNodeでコンストラクタを追加し、別のノード

答えて

1

に子どもを送っ束以上のクラスをtheresの。

public abstract class ASTreeNode ... { 

    public ASTreeNode(List<? extends ASTreeNode> children) { 
     this.children = children; 
    } 
} 

public class Operation extends ASTreeNode { 
    char s; 

    private Operation(Term t) { 
     super(t.getChildren()); 
     this.addChild(t); 
    } 
} 
+0

クラスASTreeNodeを編集せずに行うことはできますか?私たちはそのファイルを変更するはずではありません(宿題を手助けするために私たちに与えられました) 私はそれを変更できるかどうかを確認するために二重チェックします、助けてくれてありがとう! – user1256783

+0

あなたはすべての子供たちに 'ASTreeNode'を渡す方法をお持ちですか? –

+0

私は実際にこれを行う必要はないことを理解しました。おもう。ツリーはすでに構築されているので、root = root.getChild(0)やroot.getChild(1)のような処理を行い、何らかの再帰やループを行うだけでツリーを通過する必要があります。遅い応答と助けてくれてありがとう – user1256783

関連する問題