【问题标题】:How can a null reference to an interface return a value?对接口的空引用如何返回值?
【发布时间】:2015-01-14 17:22:47
【问题描述】:

代码是:

interface I {
    int i = 0;
    void display();
}

class A implements I {
    I i1;

    public static void main(String[] args) {
        A a = new A();
        a.display();
    }

    public void display() {
        System.out.println(i1); //1
        System.out.println(i1.i); //2
    }
}

代码的输出是

null
0

但是当i的地址是null,那么第二个i1.i是怎么返回值的呢? 如何使用空引用指向变量?

【问题讨论】:

标签: java


【解决方案1】:

Fields declared in interfaces are implicitly static.

接口主体中的每个字段声明都隐含为publicstaticfinal。允许为这些字段冗余地指定任何或所有这些修饰符。

这个

i1.i

是一个static 字段访问表达式。它依赖于i1 的类型,而不是它的值。完全等价于

I.i // where I is the name of your interface

【讨论】:

  • 这就是为什么通过实例访问静态字段不是一个好主意的原因,即使 Java 允许您这样做。
  • “接口中声明的字段是隐式静态的”和最终的。
  • 我相信 Eclipse 甚至会在您这样做时发出警告,这通常是一种不好的做法(尽管有时它是可取的)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-06-18
  • 2014-10-04
  • 1970-01-01
  • 2018-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多