Может ли объект содержать массив своего собственного объекта - PullRequest
1 голос
/ 30 июня 2011

У меня есть объектные учетные записи, в которых есть дополнительные учетные записи.

У меня обоих одинаковая структура, мне нужна одна родительская учетная запись, с которой связано от 1 до многих детей. Они оба будут сопоставлены одному и тому же классу объектов (который я не могу редактировать, всегда так!) На разных объектах. Так возможно ли иметь массив Объекта внутри самого объекта? Или я должен составить список родителей и в этом списке есть список детей?

РЕДАКТИРОВАТЬ: Я не могу редактировать класс.

Я сейчас работаю так:

Account acc = new Account()
Account[] subacc = new Account[length]

Теперь это вопрос. Без редактирования учетной записи Как можно связать родителей и детей. Я предполагаю, что единственный способ - создать объект-обертку для хранения их обоих? Есть ли более чистый способ сделать это?

Ответы [ 7 ]

6 голосов
/ 30 июня 2011

Ты имеешь в виду что-то подобное?

class Account
{
    private Account[] children;
}

Абсолютно. (И то же самое верно для List<Account> или только для одного поля Account и т. Д.)

2 голосов
/ 30 июня 2011

Да.Фактически массив может содержать ссылку на сам объект.

Когда вы управляете объектами, вы имеете дело со ссылками (или указателями), и вы можете делать с ними обычные вещи.Только когда вы выполняете myObject.myMethod (), они получают ссылку для получения реального объекта.

public class MyTest {
  public myTest[] myArray = new MyTest[10];
  public MyTest() {
    this.myArray[0] = this;
  }
}
1 голос
/ 30 июня 2011

Я не знаю, получил ли я вас, но вы можете сделать что-то вроде следующего:

  public class Person
    {
        public string Name { get; set; }
        public List<Person> Chldren { get; set; }
    }


    public class MyClass
    {

        public static void Main()
        {
            Person myDad=new Person();
            myDad.Chldren=new List<Person>()
                              {
                                  {new Person()},
                                  {new Person()}
                              };

        }
    }
1 голос
/ 30 июня 2011

Нет причин, по которым вы не можете иметь отношения родитель / потомок среди объектов одного типа. Например, вы можете пройтись по получившемуся дереву до

account.getParent () == null

1 голос
/ 30 июня 2011

Если я вас правильно понимаю

public class Account {

    private String id;
    private List<Account> linkedAccounts;

    //Getter and setter

}

Если вы хотите что-то вроде того, что я упомянул выше, тогда да. Если вы четко не заявите, чего вам нужно достичь, это то, что я могу показать.

Атрибут linkedAccounts содержит список Account (обычно связанный с объектом родительского аккаунта).

1 голос
/ 30 июня 2011

Вы можете взять любой, в зависимости от ваших потребностей, взять List, если вам нужен расширяемый array, также у вас будет поддержка методов

После компиляции штрафа:

class Foo {

    private Foo[] arr = new Foo[10];
    private List<Foo> list = new ArrayList<Foo>();
}
0 голосов
/ 30 июня 2011

Разве это не то, что содержит узел в n-арном дереве ?Каждый узел может содержать не более n дочерних элементов.Каждый узел в двоичном дереве может иметь 2 дочерних элементов.Каждый узел троичного дерева может иметь список (или другую коллекцию) до 3 дочерних элементов.И т.д.

Я неправильно понял вопрос?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...