【问题标题】:Data from my class is null?我班级的数据为空?
【发布时间】:2011-09-21 13:36:36
【问题描述】:

我有一个类持有一个boolean 和两个doubles,然后是该类的一个array,我需要booleandoubles 具有false, 0.0, and 0.0 的默认值,然后我有function 引用array 的一个元素,当我尝试从类中访问其中一个变量时,它会抛出一个异常,说它为空。这是我的类和调用它的函数。

    public class PanelData {
        boolean flag = false;
        double tempStart = 0.0;
        double tempEnd = 0.0;
    }

    private PanelData[] panelInfo = new PanelData[115];

private void panelInfoHandler (int i, double timeStart, double timeEnd) throws SQLException
    {
        if (!panelInfo[i].flag) {
            delete();
            insert();
            panelInfo[i].flag = true;
            panelInfo[i].tempStart = timeStart;
            panelInfo[i].tempEnd = timeEnd;
        }
        else if (panelInfo[i].tempStart <= timeStart && panelInfo[i].tempEnd >= timeEnd) {

        }
        else
        {
            insert();
            panelInfo[i].tempStart = timeStart;
            panelInfo[i].tempEnd = timeEnd;
        }
    }

我是这样称呼这个班级的。

panelInfoHandler(9, parsedStart, parsedEnd);

【问题讨论】:

    标签: java class object null


    【解决方案1】:

    new PanelData[115] 创建一个 115 空引用数组。您是否在 panelInfo 中填充了对实际对象的引用?

    然后,您至少需要遍历该数组并为数组中的每个元素创建 PanelData 的新实例,例如

    for (int i = 0; i < panelInfo.length; i++)
      panelInfo[i] = new PanelData();
    

    【讨论】:

    • 哦不,我没有,我应该改用ArrayList,然后运行for loop,添加对实际对象的引用吗?
    • @Beef:如果集合的大小需要在运行时改变,那么使用ArrayList 可能确实更容易。
    • @Beef - 那么您是否已经实例化了对象,还是打算创建新对象?
    • 我现在一切正常,感谢您的输入,我已经知道我需要多少对象,所以无论是 aix、pedros 还是 Hughs 答案都可以快速解决,谢谢大家
    【解决方案2】:

    在初始化之前,您的数组中充满了 null 元素。澄清一下,如果你创建一个原始对象数组,你会得到一个默认(即 0)值的数组。但是,Objects 的数组是使用 null 元素创建的。

    int[] myIntArray = new int[10];  // 10 default values of 0
    Integer[] myIntegerArray = new Integer[10];  // 10 null elements
    

    【讨论】:

      【解决方案3】:

      添加这一行然后赋值:

       if(panelInfo[i] == null) panelInfo[i] = new PanelInfo(); 
      

      【讨论】:

        【解决方案4】:

        你需要做类似的事情

        for(int i=0;i<115; i++)
        {
           PanelInfo[i] = new PanelData();
        }
        

        (或任何正确的 Java 语法)

        【讨论】:

          【解决方案5】:
            public class PanelData {
                  boolean flag = false;
                  double tempStart;
                  double tempEnd;
          
                  public PanelData() {
                      flag = false;
                      tempStart = 0.0;
                      tempEnd = 0.0;    
              }
              private PanelData[] panelInfo = new PanelData[115]; 
          
              for(int i = 0; i < 115; i++)
                 panelInfo[i] = new PanelData();     
          

          在这种情况下,创建默认构造函数可以让您使用默认值(false、0.0、0.0)来实例化变量,这样您就可以测试是否获得了原始对象。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-05-20
            • 2016-06-03
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多