无法访问包中的类

问题描述 投票:1回答:5

我有以下目录结构:

MessManagement是父目录。

根据我有3个目录:studentmessconvenermessmanager

学生目录包含Student.javaStudent.class文件。 messconvener包含MessConvener.java这需要Student class,因为MessConvenerStudent本身延伸。

我应该怎么做类的包装.... ??

到目前为止我尝试了什么。

代码:

这是Student.java

package MessManagement;
import java.sql.*;

public class Student
{

}

这是MessConvener.java

package MessManagement;
import MessManagement.student.Student;
public class MessConvener extends Student
{

}

但这似乎不起作用。错误消息:

MessConvener.java:2: error: package MessManagement.student does not exist import MessManagement.student.Student; ^ MessConvener.java:3: error: cannot find symbol public class MessConvener extends Student ^ symbol: class Student 2 errors

java package packages
5个回答
1
投票

发生这种情况有两种可能的原因

  1. 您的目录的根目录是否包含在类路径中?您需要指定何时启动java程序。 See the documentation on how to do thatthis variant for unix
  2. 你的课程公开吗?如果您忘记了public修饰符,则类将具有包可见性,并且无法从其他包访问。
  3. 哦,没有人期待西班牙人的调查......仔细检查你的拼写,包括首都。

12
投票

你得到的错误是有道理的。 Student类位于MessManagement包,而不是MessManagement.student包。


对我来说,出于不同的原因我得到了这个错误,这是在一个maven项目中。它在我对类进行了重大更改并复制到许多新类之后开始出现。在您的情况下,没有冲突的包名称。

解决方案是做mvn clean

在此之后,我再也没有得到那个错误。


1
投票

我最近有这个问题,因为我在与我正在编译的java文件相同的目录中有一个类文件。您需要删除该目录中的所有.class文件。


0
投票

我删除了out文件夹,问题解决了


0
投票

将文件从一个项目复制到另一个项目或通过重构移动文件时,可能会发生这种情况。

在我的Intellij IDEA / Gradle项目中对我有帮助的是删除包装线并使用Shift+Enter将其替换为看似非常相似的。如果你有很多类,你需要找到依赖项的“根”,然后从那里开始。非常奇怪的解决方案,作为这些文件的明文的差异将没有显示,但解决了问题。另一个解决方案是在包上使用Refactor-Rename,给它一个缓冲区名称,然后再次命名,就像你想要它被调用一样。我没有深入研究为什么会发生这种情况。

在maven项目中,mvn clean帮助了我。

© www.soinside.com 2019 - 2024. All rights reserved.