Как добавить все элементы в списке в абстрактное синтаксическое дерево, не зная, сколько элементов? - PullRequest
0 голосов
/ 08 марта 2012

Итак, у меня есть класс AbstractSyntaxTreeNode.java (вот его часть)

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);
}

А потом у меня есть другой класс Operation, который расширяет ASTreeNode

public class Operation extends ASTreeNode
{
  char s;

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

Как добавить все дочерние объекты t (которые также расширяют ASTreeNode) в аргументы супер-ctor? Без жесткого кодирования это так? Я пробовал super (t, t.children), но конструктор не принимает List в аргументе, только ASTreeNodes принимаются.

О, и это классный термин

public class Term extends ASTreeNode
{
  char symbol;

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

И есть еще куча классов, которые отправляют своих детей в другой узел

1 Ответ

1 голос
/ 08 марта 2012

Добавить конструктор в ASTreeNode, который принимает список в качестве аргумента.

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);
    }
}
...