如何在类之间传递属性

时间:2015-02-15 17:55:36

标签: java class

我有两个类,Window和Register,我在Window中捕获一个String然后我需要在Register中使用。这是我的一段代码:

public class Window extends JFrame{
private String city;

public String getCity() {
    return city;
}

public void setCity(String city) {
    this.city = city;
}

public Window() {
    Interface();
}

public void Interface(){

    botonContinuar = new JButton("Next");
    botonContinuar.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            //This get the value from my list...
            setCity((String) listaCity.getSelectedValue());

            Register open=new Register();

        }
    });
    botonContinuar.setBounds(164, 203, 89, 42);
    panel.add(botonContinuar);

}

public class Register extends Window {

public Register() {
    Window window=new Window();

    System.out.println(window.getCity());

}

  

输出为:null:,当我期望从Window中的列表中捕获城市时。我是Java的新手,但我想问题是我创建了一个新的Window objetc然后我的所有属性都被初始化了,但我无法弄清楚如何避免这种情况。

提前致谢

3 个答案:

答案 0 :(得分:0)

当您使用此构造函数时,将初始化city属性,您将看到输出。不管怎样,这个城市仍然是null

Window window=new Window("New York");

System.out.println(window.getCity());

另一种选择是使用public void setCity(String city)方法,例如:

Window window=new Window();
window.setCity("New York");
System.out.println(window.getCity());

答案 1 :(得分:0)

一些事情:

  • 除非您默认设置城市,否则默认情况下,城市变量将为空。
  • 只有当您按下按钮时才会调用设置城市。

如果您需要默认值,我建议您将其初始化为:

private String city = "defaultValue"; //or modify constructor to pass city value when object initializes.

答案 2 :(得分:0)

我看到两个问题

  1. 您没有在Window的构造函数中设置city属性。目前,Register必须调用Window的actionPerformed动作才能设置城市。
  2. 在Window的Interface方法中,实例化一个新的Register。这可能是一个问题,因为如果Register需要调用Window的Inteface方法,但是Interface需要调用新的Register,那么这可能会导致StackOverflow异常或循环依赖。
  3. 以下是一些建议:

    1. 注册调用new Window()或Window调用new Register(),但不能同时调用。{/ li>
    2. 考虑将城市传递给构造函数中的Register。