Создание метода для ссылки на список родительских массивов

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

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

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 ответа

Решение

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

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

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

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

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 Section parent;

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

Другие вопросы по тегам