Статические переменные в Java для создателя теста oObject - PullRequest
2 голосов
/ 17 мая 2010

У меня есть что-то вроде следующего

TestObjectCreator{

    private static Person person;

    private static Company company;

static {
    person = new Person()
    person.setName("Joe");
    company = new Company();
    company.setName("Apple");
}

public Person createTestPerson(){
    return person;
}

 public Person createTestCompany(){
    return company;
}

}

Применяя статический {}, что я получаю? Я предполагаю, что объекты являются синглетонами в результате. Однако, если бы я сделал следующее:

  Person person = TestObjectCreator.createTestPerson();
  person.setName("Jill");
  Person person2 = TestObjectCreator.createTestPerson();

будет ли персона 2 названа Джилл или Джо?

Ответы [ 2 ]

2 голосов
/ 17 мая 2010

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

В вашем примере это означает, что когда класс TestObjectCreator загружается в JVM, человек создается и ему присваивается имя "Joe". Затем вы извлекаете этого человека с помощью первого вызова TestObjectCreator.createTestPerson () и изменяете имя этого человека на «Джилл». Поскольку в TestObjectCreator есть только один человек, теперь вы изменили его имя во всех случаях. Итак, человека 2 зовут Джилл.

0 голосов
/ 17 мая 2010

Я не вижу ваш метод установки, но это будет Джилл, если вы правильно его реализовали.

В настоящее время ваш класс не является одноэлементным, поскольку все еще можно создать несколько экземпляров вашего класса. Чтобы сделать ваш класс синглтоном, сделайте ваш конструктор приватным. Затем напишите статический экземпляр TestObjectCreator и верните его через статический метод фабрики.

Преимущество статичности Person и Company заключается в том, что все экземпляры TestObjectCreator будут иметь одну и ту же копию Person и Company. Я не уверен, что это то, что вы хотите, но это то, что дает вам статика.

...