首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么Java编译器(特别是它的解析器)不能理解这个语句

为什么Java编译器(特别是它的解析器)不能理解这个语句
EN

Stack Overflow用户
提问于 2013-12-17 05:34:28
回答 2查看 705关注 0票数 18

我有以下两个类(在两个单独的文件中)。

代码语言:javascript
复制
public class Foo
{
    public static class A
    {
        public static final boolean FLAG = false;
    }

    public final A A = new A();
}


public class Bar
{
    void method()
    {
         if (Foo.A.FLAG)  <<<< this is giving "Cannot make static ref to non-static field
            // do something
           ;
    }
}

我的问题是,为什么编译器不能识别Foo.A,我指的是类A,而不是成员,它恰好也被命名为A

EN

回答 2

Stack Overflow用户

发布于 2013-12-17 06:11:27

访问标志的一些方法:

代码语言:javascript
复制
<Foo_A extends Foo.A> void test1()
{
    if(Foo_A.FLAG)
        ;
}

void test2()
{
    class Foo_A extends Foo.A{}
    if(Foo_A.FLAG)
        ;
}

-------------------------------------
import pkg.Foo.A;

public class Bar
{
    void test3()
    {
        if(A.FLAG)
            ;
    }
}

在这些上下文中,"Foo.A"只能解释为类型,而不能解释为变量。

票数 4
EN

Stack Overflow用户

发布于 2013-12-17 05:36:10

因为内部类需要封闭类型的实例。如果你没有Foo的实例,A就不存在。

编辑-这是不正确的,但原因是信息性的。请看下面的评论:

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20621371

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档