0

这是问题所在,当我定义这样的接口时:

package mypackage;
public interface Ainterface {
  int VAL = 6;
}

然后我定义了一个类,如:

public class Aclass implements Ainterface {
  private String[] str = new String[VAL];
  public static void main(String[] args) { ... }
}

当我编译程序时,显示错误消息:找不到符号“VAL”。

符号:VAL

职位:A级

4

4 回答 4

6

当我编译程序时,显示错误消息:找不到符号“VAL”。

那是唯一的编译器错误消息吗?如果是这样,请goto wtf;

如果不是,是否有任何其他编译器错误消息等同于编译器说它也找不到Ainterface?如果是这样,你的问题很简单。似乎要么Aclass在不同的包中,要么你打算让它在同一个包中。在前一种情况下,您需要import mypackage.Ainterface. 后一种情况,你需要Aclasspackage mypackage.

重量级:

您能否提供显示该问题的最小工作示例?问题是:我必须非常努力地重现您的问题,而且这不太可能是您遇到的问题。

可能性很少。

一个。Ainterface并且Aclass在同一个包中。在这种情况下,应该没有问题。

Ainterface.java:  

package mypackage;

public interface Ainterface {
  int VAL = 6;
}

Aclass.java

package mypackage;

public class Aclass implements Ainterface {
  private String[] str = new String[VAL];
  public static void main(String[] args) { }
}

湾。Ainterface并且Aclass在不同的包装中。在这种情况下,源文件中必须有一个import mypackage.Ainterfaceimport 语句。在这种情况下,应该没有问题。javaAclass

package mypackage;

public interface Ainterface {
  int VAL = 6;
}

Aclass.java:

package myotherpackage;
import mypackage.Ainterface;

public class Aclass implements Ainterface {
  private String[] str = new String[VAL];
  public static void main(String[] args) { }
}

在这两种情况下,代码都将按原样编译。这些都不会产生问题,它们是唯一有意义的两种可能性。还有第三种可能。请告诉我不是这个。您Ainterface定义了两个,一个在一个包中,一个在另一个包中,并且与未定义的定义之一Aclass相同:packageVAL

Ainterface.java:

package mypackage;

public interface Ainterface {
  int VAL = 6;
}

Ainterface.java:

package myotherpackage;

public class Ainterface {

}

Aclass.java:

package myotherpackage;

public class Aclass implements Ainterface {
  private String[] str = new String[VAL];
  public static void main(String[] args) { }
}

产生错误。而且,需要明确的是,这可能是偶然发生的。假设您定义Ainterface并放入mypackage. 假设你定义Aclass并且你没有把它放在同一个包中并且你忘记了 import mypackage.Ainterface。如果您使用的是 Eclipse 之类的 IDE,您将收到一条Ainterface无法解析为类型的错误消息,您将获得三个可用的快速修复:“Import 'Ainterface' (mypackage)”、“Create interface 'Ainterface '", "修复项目设置...". 如果您不小心单击了第二个选项,您最终会遇到这种情况。但这只是愚蠢的,这不可能是你想要的。所以,请帮助我们帮助您。

于 2013-08-07T03:36:22.700 回答
1

您应该以静态方式引用 VAL,因为接口中定义的所有变量都是默认的publicstatic并且final. 这应该有效:

  private String[] str = new String[Ainterface.VAL];
于 2013-08-07T03:35:35.663 回答
1

除了方法声明之外,接口还可以包含常量声明。接口中定义的所有常量值都是隐式的public、static 和 final。再一次,这些修饰符可以省略。检查以获取更多详细信息。

所以为了访问它使用Ainterface.VAL(因为接口中定义的变量是静态的)。

private String[] str = new String[Ainterface.VAL];
于 2013-08-07T03:36:49.777 回答
0

如果存在于同一个包中,这可以正常工作,但如果您希望该文件位于不同的包中,那么您可以做任何事情。

选项1:

Import mypackage;

Aclass.java文件中

选项 2:
或者VALAinterface.VALthen 语句变为

private String[] str = new String[Ainterface.VAL];
于 2013-08-07T03:40:19.390 回答