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

标签 java variables getter-setter

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

1 级

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){}
  }
}

2级

public class PrikaziRacune extends javax.swing.JFrame 
{
    UvoziRacun rac = new UvoziRacun();

    public PrikaziRacune() 
    {
        initComponents();

        try
        {
            System.out.print(rac.getRacun()); // value is null, why?
            //jLabel2.setText();
        }
        catch(Exception ex){}
}

方法seznamRacunov.add(potRacuna);将值存储到类1中的seznamRacunov中,但列表的值没有传递到我调用getter的类2中。怎么了?

最佳答案

Method seznamRacunov.add(potRacuna); store a value into seznamRacunov in Class 1, but the value of list does not pass in class 2 where I called getter.

那是因为,您试图get()您的List,甚至没有调用方法 - showDailog(),后者又调用您的add() 方法来填充列表。

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

  • 或者,如果您向类添加一个构造函数,它会执行初始化您的List的任务,那就更好了>。然后您可以使用该构造函数创建一个实例,因此不会有任何问题。

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

还有一件事,您永远不应该通过使用 catch block 来吞噬异常。否则的话,捕获他们就没有意义了。添加一个 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 声明。您在左侧使用通用类型List,在右侧使用原始类型ArrayList。这是你应该避免的事情。

两侧都有Generic类型:-

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

关于Java - 从一个类到另一个类的变量值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12950781/

相关文章:

java - 如何在 Java 中实现双向链表?

variables - Tensorflow中默认的variable_scope是什么?

java - 在Java中初始化ivars

javascript - 为什么我的单例模块似乎有两个实例?

java - 使用 Java jna 和 FFTW3 包装器获取 malloc 错误

java - 父类(super class)是每个子类的模板吗

Java:子类调用父类方法

mysql - MySQL 中日期的动态别名

javascript - 使用先前声明的变量在 fib 序列 javascript 中查找第 n 个值

actionscript-3 - 覆盖继承的 getter/setter