Рассмотрим код, который вы используете для инициализации объекта (отформатированный для удобства чтения):
String s1 = "additional policy";
InsurancePolicy j = new InsurancePolicy(s1);
public InsurancePolicy(String s1){
this.s1 = s1;
}
Техническая проблема здесь - во второй строке (инициализация переменной-члена j
),потому что вы не можете использовать член класса (s1
в этом случае) для инициализации другого члена класса (j
в этом случае) таким образом.Предоставленное значение должно быть константой времени компиляции, такой как буквенная строка "additional policy"
в предыдущей строке.
Однако проблема концептуальная заключается в том, что значение по умолчанию не являетсядаже очень нужно здесь и делает для некоторой дублированной логики.У класса есть только один конструктор, и у этого конструктора есть параметр String
.Таким образом, каждый раз, когда создается экземпляр класса, требуется String
.
Таким образом, вы можете решить как концептуальную, так и техническую проблему одновременно.Концептуальная проблема решается тем, что вы всегда можете рассчитывать на предоставленное значение и не нуждаетесь в значении по умолчанию.И техническая проблема решается тем, что вы можете инициализировать вашего члена класса в конструкторе, а не на уровне класса.Например:
String s1;
InsurancePolicy j;
public InsurancePolicy(String s1){
this.s1 = s1;
this.j = new InsurancePolicy(s1);
}
В этом случае также следует отметить пару вещей:
- Подобные члены класса, вероятно, также должны быть явно
private
.Если нужен внешний доступ к этим членам, создайте методы getter / setter.Кажется, у вашего класса уже есть такие методы для j
, что является хорошим началом. - Попробуйте добавить логику в конструктор, чтобы при необходимости проверить предоставленное значение
String
.То есть для защиты от null
или пустой строки или чего-либо еще, что могло бы иначе нарушить логику вниз по течению. - Если значение
String
, используемое для инициализации InsurancePolicy
, также может быть получено из InsurancePolicy
объект (и я не вижу причин, почему это не должно), то вы дублируете свои данные здесь.Для ученика s1
это , скорее всего, вообще не нужно и его следует удалить.