Создание метода для ссылки на список родительских массивов - PullRequest
0 голосов
/ 11 июля 2011

Итак, я задал вопрос, похожий на этот, но я не думаю, что полученный мной ответ работал с тем, что я пытался сделать.

Скажем, у меня есть этот класс:

Java-код

public class Section
{
    private String sDocumentTitle;
    private String sHeadingTitle;
    private String sText;
    public ArrayList<Section> aSiblingSection = new ArrayList<Section>();
    public ArrayList<Section> aChildSection = new ArrayList<Section>();
    public ArrayList<image> aImages = new ArrayList<image>();

    public void setName(String docTitle)
    {
        //set passed parameter as name
        sDocumentTitle = docTitle;
    }

    public void addName (String docTitle)
    {
        //adds remaining Title String together
        sDocumentTitle += (" " + docTitle);
    }

    public String getName()
    {
        //return the set name
        return sDocumentTitle;
    }

    public void setSection(String section)
    {
        //set passed parameter as name
        sHeadingTitle = section;
    }

    public void addSection(String section)
    {
        //adds section parts together
        sHeadingTitle += ("" + section);
    }

    public String getSection()
    {
        //return the set name
        return sHeadingTitle;
    }
    public void setText(String text)
    {
        //set passed parameter as name
        sText = text;
    }

    public void addText(String text)
    {
        //adds 
        sText += (" " + text);
    }

    public String getText()
    {
        //return the set name
        return sText;
    }
    public ArrayList getChildSection()
    {
        return aChildSection;
    }
}  

И дочерний раздел, инициализированный таким образом в классе драйверов ...

Section aSection = new Section();
aMainSection.get(0).aChildSection.add(aSection);

По сути, кто-то может дать мне представление окак бы я добавить метод в классе раздела, который возвращает родителей из списка массивов 'aChildSection'?

Ответы [ 3 ]

3 голосов
/ 11 июля 2011

Добавить конструктор

private final Section parent;
public Section(Section parent) {
    this.parent = parent;
}

public Section getParent() {
    return parent;
}

При добавлении дочернего элемента

Section aSection = new Section(aMainSection.get(0));
aMainSection.get(0).aChildSection.add(aSection);
2 голосов
/ 11 июля 2011

Полагаю, у каждого раздела (кроме основного) есть один родитель.Хитрость заключается в том, что раздел должен знать, что это родительский раздел.

Широко используемый шаблон - установить родительский элемент с помощью конструктора и добавить некоторую логику в конструктор, чтобы он автоматически регистрировал раздел как дочерний элемент родителя.:

public Section(Section parent) {
  this.parent = parent;   // remember your parent
  parent.addChild(this);  // register yourself as your parent's child
}

Затем используйте этот код для добавления раздела:

Section mainSection = aMainSection.get(0);   // ugly!!
Section section = new Section(mainSection);

Совет по рефакторингу - объявите все свои поля private и реализуйтедобытчики.Еще лучше, если эти получатели не возвращают внутренние списки, а просто значения из списка.

2 голосов
/ 11 июля 2011

С вашей моделью вы не можете.Добавьте родительский раздел:

private Section parent;

и установите его для каждого дочернего сеанса (в родительском сеансе он будет нулевым)

...