【问题标题】:Unable to access my constant/final String array values declared in a Java interface无法访问在 Java 接口中声明的常量/最终字符串数组值
【发布时间】:2014-02-21 14:20:29
【问题描述】:

所以我有一个接口,它声明了一些常量整数,我可以在任何实现所述接口的类中访问它们。

我刚刚在接口中声明了一个常量字符串数组,我试图访问它,结果是一个空指针表达式,我的数组是这样声明的:

public static final String[] STRINGS = {"bla","bla","bla","bla", "bla", "bla"};

在测试程序中,下面这行返回一个 NullPointerException:

System.out.println(STRINGS[1]);

所以,我的问题是:这里有什么问题吗,还是只能在接口中使用整数常量?

public class MyFrame extends JFrame implements MyInterface {
....
....
private static JCheckBox[] checkBoxes = new JCheckBox[NUMBER];
....
....
int counter = 0;
        for (JCheckBox box : checkBoxes) {
            box.setText(STRINGS[counter]);
            box.setSelected(false);
            checkBoxPane.add(box);
            counter++;
        }

 ....

上面的代码显示了测试类,NUMBER 和 STRINGS 在 MyInterface 中声明,为简单起见,我更改了名称。

提前致谢。

【问题讨论】:

  • 我们可以看看你的完整代码吗?
  • "你只能在接口中使用整数常量吗?"没有。
  • 测试类代码在哪里
  • 请注意,这并不是一个真正的常量数组。任何人都可以做Constants.STRINGS[1] = null;。为了保证不变性,你应该使用List<String> STRINGS = Collections.unmodifiableList(Arrays.asList("bla", "bla"));
  • 完整的异常堆栈跟踪是什么?

标签: java interface nullpointerexception constants final


【解决方案1】:

Object 数组中的元素默认为null。确保在尝试调用组件上的方法之前初始化每个 JCheckBox

for (int i=0; i < checkBoxes.length; i++) {
    checkBoxes[i] = new JCheckBox();
}

【讨论】:

  • 我以为我在声明它们的同一行中初始化了数组,但是我将 = new JCheckBox(NUMBER) 移动到程序的函数中并且它起作用了。干杯
  • 从上面的代码看来只有数组而不是元素被初始化
  • @user2253489:要学习的课程:始终阅读/发布异常的堆栈跟踪,它会告诉问题出在哪里以及问题所在,而不是假设它与接口中的常量或其他任何事情有关。
  • 公平地说,我发布的是一个空指针异常,这是堆栈跟踪中唯一有用的部分。我很困惑,因为我确实初始化了这些框(或者我认为我这样做了!),所以我认为这是一个接口问题,因为我最近才发现接口可以保存变量!
【解决方案2】:

这锅完全没问题。

public interface Trail {
    public static final String[] STRINGS = {"bla","bla","bla","bla", "bla", "bla"};
}

实施

public class X implements Trail{
    public void get() {
        System.out.println(STRINGS[1]);
    }
}

public class TEstMain {
public static void main(String[] args) {

    X x = new X();
    x.get();
}

输出:

bla

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-21
    • 2011-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-25
    • 2018-05-10
    相关资源
    最近更新 更多