Как объявить строку в объекте параметра, а затем вернуть строку в методе get? - PullRequest
0 голосов
/ 24 сентября 2019

Мне нужен метод void setSupplementalInsurance (полис InsurancePolicy) для установки дополнительного страхового полиса для полиса.и InsurancePolicy getSupplementalInsurance (): возвращает дополнительный страховой полис для полиса, если таковой существует.Некоторые ошибки возникают при вводе строки в параметр объекта.

public class InsurancePolicy{
  String s1 = "additional policy";
public InsurancePolicy(String s1){
      this.s1=s1;
  }
  InsurancePolicy j=new InsurancePolicy(s1);

public void setSupplementalInsurance(InsurancePolicy policy){
    this.j=policy;
  }

 public InsurancePolicy getSupplementalInsurance(){
    return j;
  }
}

1 Ответ

0 голосов
/ 24 сентября 2019

Рассмотрим код, который вы используете для инициализации объекта (отформатированный для удобства чтения):

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 это , скорее всего, вообще не нужно и его следует удалить.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...