Можно ли не использовать конструктор в классе? - PullRequest
0 голосов
/ 09 февраля 2020

У меня есть класс, в котором есть несколько частных полей stati c final (не уверен, правильно ли называть эти константы), и еще одна переменная экземпляра, установленная просто private, которая является прямой копией одного из приватных stati c final fields.

Каждый раз, когда объект создается из других классов, я хочу, чтобы он имел одинаковые переменные, как они назначены в классе, и без создания конструктора Java предоставляет мне доступ все методы с правильными возвращениями, как я и ожидал.

Можно ли в этом случае не создавать конструктор?

1 Ответ

1 голос
/ 09 февраля 2020

На ваш вопрос есть как минимум два ответа:

  1. Нельзя включать конструктор в ваш класс. Компилятор Java добавит для вас конструктор с нулевыми параметрами по умолчанию.

  2. Похоже, вы не должны создавать экземпляры своего класса в первую очередь. : -)

Вы сказали

Каждый раз, когда объект создается из других классов, я хочу, чтобы он имел те же переменные, что и они. назначенный в классе и без создания конструктора, Java позволяет мне получить доступ ко всем методам с правильными возвращениями, как я и ожидал.

Похоже, у вас примерно:

class TheClass {
    public final SomeType variable = /*...*/;
    // ...
}

... и вы делаете это:

TheClass instance = new TheClass();
doSomethingWith(instance.variable);

Нет причин создавать там экземпляр, просто используйте имя класса напрямую:

doSomethingWith(TheClass.variable);

Java несколько интересен тем, что позволяет получить доступ к static членам через ссылки на экземпляры (instance.variable), но нормальный способ доступа к ним - через класс (TheClass.variable).

Также, если ваши static участники не являются final, вы можете получить очень запутанное поведение:

TheClass a = new TheClass();
a.variable = 1;
TheClass b = new TheClass();
b.variable = 2;
System.out.println(a.variable); // 2?!?!?!

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

Альтернативно, сделайте класс одиночным с экземпляром (не- static) mem вместо этого.

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