Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么可以';在Java类中找不到值?_Java - Fatal编程技术网

为什么可以';在Java类中找不到值?

为什么可以';在Java类中找不到值?,java,Java,问题是,当我定义这样的接口时: 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) { ... } } 当我编译程序时,会显示错误消息:

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

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


位置:Aclass

您应该以静态方式引用VAL,因为接口中定义的所有变量默认情况下都是公共的
静态的
最终的
。这应该起作用:

  private String[] str = new String[Ainterface.VAL];
当我编译程序时,会显示错误消息:找不到符号“VAL”

这是唯一的编译器错误消息吗?如果是,请转到wtf

如果没有,是否有任何其他编译器错误消息与编译器相同,表示它也找不到
Ainterface
?如果是这样,你的问题很简单。似乎
Aclass
位于不同的包中,或者您希望它位于同一个包中。在前一种情况下,您需要
导入mypackage.Ainterface
。对于后一种情况,您需要将
Aclass
package mypackage
放在同一个包中

世界跆拳道联盟: 你能不能提供一个最小的例子来说明这个问题?问题是:我必须非常努力地重现你的问题,而这不太可能是你正在经历的问题

几乎没有可能

a
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) { }
}
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) { }
}
b
Ainterface
Aclass
在不同的包中。在这种情况下,
Aclass
java
源文件中必须有一个
import mypackage.Ainterface
import语句。在这种情况下,应该没有问题

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) { }
}
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
与未定义
VAL
的一个定义位于同一个
package
中:

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
,但没有将其放在同一个包中,并且忘记导入
mypackage.Ainterface
。如果您使用的是像Eclipse这样的IDE,您将收到一条错误消息,
Ainterface
无法解析为类型,并且您将有三个快速修复可用:“导入‘Ainterface’(mypackage)”,“创建接口‘Ainterface’,“修复项目设置…”。如果您不小心单击了第二个选项,您将在这种情况下结束。但那太傻了,那不可能是你想要的。因此,帮助我们帮助您。

除了方法声明之外,接口还可以包含常量声明。接口中定义的所有常量值都隐式地公共、静态和最终。同样,可以忽略这些修改器。查看更多详细信息

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


如果文件存在于同一个包中,那么这很好,但如果您希望文件位于不同的包中,则可以执行以下任一操作

选项1:

Import mypackage;
Aclass.java
文件中

选项2:
或者使用
Ainterface.VAL更改
VAL
,然后语句变为

private String[] str = new String[Ainterface.VAL];

将变量
设为私有
或其他类型。如果您不提供说明符,我很确定它假定包是私有的,
Aclass
很可能处于不同的状态package@DennisMeng不可以。一个界面的所有成员都是自动的
公共的
静态的
。啊,界面的功能不同吗?给我一些思考的食物我猜它确实可以编译,假设它们在同一个包中,你们有不同包中的类吗?如果是这样的话,下面的所有答案在这里都无效。如果您删除
mypackage
声明,这将正常工作。我很确定你的问题在于你使用
软件包的方式。请发布更多的代码。虽然理论是正确的,但我认为如果类在同一个包中,它们在没有显式接口名的情况下编译得很好。我猜问题是它们在不同的包装中,缺少导入或其他东西。好吧,你们知道了一些事情。但是如果他缺少导入,那么行
Aclass implements-Ainterface
也会冒犯编译器。他没有说是这样的。我不是选民,而且我很少这样做,我同意一个普通人也应该抱怨,这有点可疑。@Nambari:同意。不是OP忽略了另一个有问题的编译器错误消息,就是我在回答中解释的最后一个可能是发生了什么。我看没有别的办法了,我明白了。谢谢,杰森。谢谢。如果问题出在
import mypackage
上,那么
Aclass implements Ainterface
这一行就有问题了。@jason是的,两行都有错误。但是我在导入包时尝试了各个方面,这样您就可以无误地访问Val了。我同意你的回答和解释。这是他出错的唯一情况。所以+1是正确的,这就是我的观点。要么两行都有问题,在这种情况下,修复是微不足道的,要么两行都没有问题,除非我在我的文章中描述了一个非常奇怪的情况。这不是问题所在。将它们放在同一个包中,或者将它们放在不同的包中,并具有
Aclass
import
mypackage.Ainterface
,在任何一种情况下都会。