Можно ли в Java инициализировать конечный элемент данных на основе вызова конструктора? - PullRequest
4 голосов
/ 03 июня 2011

Можно ли внести изменения, как указано в приведенном ниже классе, и инициализировать член для существующих абонентов некоторым значением по умолчанию, скажем, null?

Член требуется длябыть личный финал как требование к постоянству.

// initial version of the class
public class A {
    A() {
        // do some work here
    }
}

// the following modification required adding additional constructor to the class with **member** data member.
public class A {
    private final String member;

    A(String member) {
        this();
        this.member = member;   
    }

    A() {
        // initilize member to null if a client called this constructor
        // do some work here
    }
}

Ответы [ 3 ]

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

Почему у вас просто не может быть:

public class A {
    private final String member;

    A(String member) {
        this.member = member;   
    }

    A() {
        this(null);
    }
}

Это обычный шаблон для цепочки конструктора;чтобы менее специфичные версии вызывали более специфичные версии с соответствующими параметрами по умолчанию.

5 голосов
/ 03 июня 2011

Да!

public class A {
    private final String member;

    A(String member) {
        this.member = member;
        // do some work here instead   
    }

    A() {
        this(null);
    }
}
0 голосов
/ 03 июня 2011

Да, это обычно используется в Enums.

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