Конструктивное назначение переменных в конструкторе Java - PullRequest
4 голосов
/ 28 июля 2010
public class User
{
     private final String   _first_name;
     private final String   _last_name;
     private final String   _org_ID;
     private final TimeZone _time_zone;
     private final InternetAddress _email;
     private final Date _last_login;
     private final Date _creation_date;


        public User( final String org_ID,
                             final String username,
                             final String first_name,
                             final String last_name,
                             final List<String> roles,
                             final TimeZone time_zone,
                             final InternetAddress email,
                             final Date last_login,
                             final Date creation_date )
        {
            this( null, org_ID, username, first_name, last_name, roles, time_zone );

            this._email = email;
            this._last_login = last_login;
            this._creation_date = creation_date;
        }

Компилятор выдает следующую ошибку для 3-х переменных: "переменная _email, возможно, уже была назначена"

Компилятор не может сказать, что переменные не установлены в вызове первого ctor? Что мне здесь не хватает?

Ответы [ 3 ]

3 голосов
/ 28 июля 2010

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

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

2 голосов
/ 28 июля 2010

Так что компилятор недостаточно умен. Помогите.

Обычно конструктор с меньшим количеством параметров вызывает конструктор с большим количеством параметров, а не ваш.

1 голос
/ 22 октября 2011

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

...