У меня есть 2 идентично структурированных компонента и 2 идентично структурированных оператора получения, но работает только один

#java #debugging #netbeans #constructor #javabeans

#java #отладка #netbeans #constructor #javabeans

Вопрос:

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

Вот ошибка, когда я пытаюсь ее собрать:

не удается найти символ symbol: конструктор BalanceBean (java.lang.String) расположение: класс HWpackage.BalanceBean

Вот рабочий компонент, UserBean2

 package HWpackage;

public class UserBean2 {
  private String id;

  public UserBean2(String id) {
    setUsername(id);
  }

  public String getUsername() {
    return(id);
  }

  public void setUsername(String id) {
    if (!isMissing(id)) {
      this.id = id;
    }
  }

  private boolean isMissing(String value) {
    return((value == null) || (value.trim().equals("")));
  }
}
  

И вот рабочие операторы получения:

   UserBean2 userBean2 = (UserBean2)session.getAttribute("userBean2");
  String un = request.getParameter("id");
  userBean2 = new UserBean2(un);
  session.setAttribute("userBean2", userBean2);
  

Теперь сравните это с нерабочим кодом.

BalanceBean:

 package HWpackage;

public class BalanceBean {
  private String balance, id;

  public BalanceBean (String balance, String id) {
    setBalance(balance);
    setID(id);
  }

  public String getBalance() {
    return(balance);
  }

  public void setBalance(String balance)
  {
      this.balance = balance;
  }

  public String getID() {
    return(id);
  }

  public void setID(String id)
  {
      this.id = id;
  }
}
  

И его операторы получения:

 BalanceBean balanceBean = (BalanceBean)session.getAttribute("balanceBean");
String balance = request.getParameter("balance");
balanceBean = new BalanceBean(balance);
session.setAttribute("balanceBean", balanceBean);
  

По какой-либо причине значение BalanceBean в строке: balanceBean = new BalanceBean (баланс);
вызывает все проблемы.

Кто-нибудь, пожалуйста, может сказать мне, почему?

ОБНОВЛЕНО: хорошо, если я изменю свой BalanceBean на:

 package HWpackage;

public class BalanceBean {
  private String balance, id;

  public BalanceBean (String balance) {
    setBalance(balance);        
  }

  public String getBalance() {
    return(balance);
  }

  public void setBalance(String balance)
  {
      this.balance = balance;
  }

  public String getID() {
    return(id);
  }

  public void setID(String id)
  {
      this.id = id;
  }
}
  

Как мне добавить обратно мой идентификатор строки?

Комментарии:

1. Я не понимал, что не могу просто поместить туда все, что мне нужно. Итак, могу ли я иметь баланс и идентификатор в одном компоненте? И если да, то как мне это настроить?

Ответ №1:

Они не идентичны, и ошибка точно сообщает вам, что не так:

 cannot find symbol symbol : constructor BalanceBean(java.lang.String)
  

У вас нет конструктора в BalanceBean, который принимает String в качестве единственного аргумента.

У вас есть:

 public BalanceBean (String balance, String id) 
  

И пытаюсь вызвать:

 balanceBean = new BalanceBean(balance);
  

Редактировать: Если вы хотите добавить второй конструктор, вы более чем в состоянии:

 public BalanceBean (String balance) {
    setBalance(balance);
}
  

Комментарии:

1. Я не понимал, что не могу просто поместить туда все, что мне нужно. Итак, могу ли я иметь баланс и идентификатор в одном компоненте? И если да, то как мне это настроить?

2. Я немного смущен тем, о чем вы спрашиваете. Вы можете делать все, что хотите. В данный момент вы пытаетесь вызвать конструктор, который не существует. Вашему конструктору требуется 2 строки, и вы предоставляете ему одну. Создайте второй конструктор, который принимает только одну строку, если хотите, точно так же, как в вашем другом компоненте (см. Мой отредактированный ответ выше).

3. Большое вам спасибо за вашу помощь, я обновил свой вопрос, если бы вы могли помочь мне с этим, я был бы очень признателен!

4. @Turk, вы, кажется, не понимаете основ того, как работают методы или конструкторы. Я не уверен, как помочь в этой ситуации, кроме как сказать, что вам нужно начать с базового руководства по программированию. Ваш первый конструктор был хорош, если вы хотели предоставить 2 строки (balance и id), но вы этого не делали. Теперь вы изменили его, чтобы принимать только один аргумент.

5. Ах! Спасибо за вашу помощь, я думаю, что я понял это. Я просмотрел некоторую информацию о конструкторах и, полагаю, нашел свой ответ. Вы мне очень помогли!

Ответ №2:

В BalanceBean есть конструктор с двумя аргументами. public BalanceBean (String balance, String id) . Вы передаете только один аргумент new BalanceBean(balance)

Ответ №3:

Взгляните на конструкторы класса BalanceBean, похоже, вы не определили конструктор только с одним параметром.

Ответ №4:

Конструктор BalanceBeam(String, строка) ожидает 2 параметра, а вы предоставляете ему только один параметр. Поэтому необходим новый конструктор типа BalanceBeam (строка)