Java—从一个类到另一个类的变量值

Java—从一个类到另一个类的变量值,java,variables,getter-setter,Java,Variables,Getter Setter,我想将List类型的变量值(变量名为seznamRacunov)从一个类传输到另一个类 第一类 public class UvoziRacun { private String potRacuna; private List<String> seznamRacunov = new ArrayList(); public void setRacun(List<String> seznamRacunov) { this.seznamRacuno

我想将List类型的变量值(变量名为seznamRacunov)从一个类传输到另一个类

第一类

public class UvoziRacun 
{
  private String potRacuna;
  private List<String> seznamRacunov = new ArrayList();

  public void setRacun(List<String> seznamRacunov)
  {
      this.seznamRacunov = seznamRacunov;
  }

  public List<String> getRacun()
  {
      return seznamRacunov;
  }

  public String getPotRacuna()
  {
      return potRacuna;
  }

  public void showDailog()
  {
      try
      {
        JFileChooser racun = new JFileChooser();
        racun.setCurrentDirectory(new File(""));

        racun.setFileFilter(new javax.swing.filechooser.FileFilter() 
        {
            public boolean accept(File f) 
            {
                return f.getName().toLowerCase().endsWith(".xml") || f.isDirectory();
            }
            public String getDescription() 
            {
                return "XML Datoteka";
            }
        });

        //racun.setMultiSelectionEnabled(true);
        int r = racun.showOpenDialog(new JFrame());

        if (r == JFileChooser.APPROVE_OPTION)
        {
            potRacuna = racun.getSelectedFile().getPath();
            seznamRacunov.add(potRacuna); //value is stored
        }
        //System.out.print("Racuni: " + seznamRacunov);
      }
      catch(Exception ex){}
  }
}
方法
seznamRacunov.add(potRacuna)在类1中将一个值存储到seznamRacunov中,但是list的值在我调用getter的类2中没有传递。怎么了

方法seznamRacunov.add(potRacuna);将值存储到seznamRacunov中 在类1中,但list的值在类2中不传递,其中I 叫盖特

这是因为,您试图
get()
您的
列表
,而不调用
方法-showDailog()
,该方法反过来调用您的
add()
方法来填充列表

  • 在使用
    get
    方法实际获取
    list
    之前,请确保调用此方法-
    showDailog()
    来填充列表

  • 或者,如果您向类中添加一个
    构造函数
    ,它将执行初始化
    列表
    的任务,这会更好。然后可以使用该
    构造函数创建一个实例,这样就不会有任何问题

PS:-您应该始终至少有一个
0-arg构造函数来初始化字段,而不是
让编译器替您处理此任务

还有一件事,您永远不应该通过使用
空的
catch块来嵌入您的异常。否则就没有抓住它们的意义了。添加一个
printStackTrace()
调用

 public PrikaziRacune() {
    initComponents();

    try
    {
        rac.showDailog();  // Will populate the list
        System.out.print(rac.getRacun()); // You can get the value here.
        //jLabel2.setText();
    }
    catch(Exception ex) {
        ex.printStackTrace();
    }
}
  • 另外,在第一节课中检查
    ArrayList
    声明。您在LHS上使用的是
    generic type List
    ,在RHS上使用的是
    Raw type ArrayList
    。这是你应该避免的事情
两边都有
通用
类型:-

private List<String> seznamRacunov = new ArrayList<String>();
private List seznamRacunov=new ArrayList();

您想要值还是引用?我想要列表的值存储在第一个类中。谢谢您的建议,我将尝试第一个解决方案。在第二个解决方案中,我不想再显示一次对话框,所以这不是一个好主意。@Strausa然后您需要定义一个构造函数来初始化列表。因为您仅在
showDailog
方法中初始化它。。
private List<String> seznamRacunov = new ArrayList<String>();