【问题标题】:import class/package placed in another package of same/higher level of hierarchy导入类/包放置在相同/更高层次结构的另一个包中
【发布时间】:2021-06-08 11:55:33
【问题描述】:

我的桌面上有两个文件夹 pack1 和 pack2。 pack1 包含 file1.java 文件,代码为:

public class File1 {
    public static void main(String[] args){     
    }   
}

pack2 包含 file2.java,代码为:

import pack1.File1;
public class File2 {
    public static void main(String[] args){     
    }   
}

我成功编译了file1.java,并且在pack1中创建了file1.class,但是编译file2.java时出错:

error: package pack1 does not exist
import pack1.File1;
            ^
1 error

从上面的错误我认为我只能导入存在于相同或子目录中的类/包,因为 Pack1 不在我正在编译的同一目录中(当前工作目录 = $HOME/Desktop/ pack2) 如果我错了,请纠正我。

如果我的理解是正确的,我该如何在 file2 中导入 file1。

【问题讨论】:

  • 您应该描述您的实际问题。你遇到了什么错误?请具体。要导入 subPack1,您只需 import subPack1;
  • 从您的问题中读取,在同一模块的任何包中导入任何类应该没有任何问题。请提供示例。
  • 导入与“当前”包无关。与目录的关联具有误导性。类从 Java 类路径中列出的基本文件夹中解析。
  • 其实subPack1中有一个java文件,需要导入subPack2。假设我需要导入一个放在当前目录中的包,我将直接导入它,但是这里包 subPack2 放在 pack2 中,它具有父级层次结构。
  • 如果我的回答不够充分,那么您真的需要阅读minimal reproducible example 并相应地增强您的问题。向我们展示足够的代码来重现问题。你看,你解释你的代码做了什么......并没有真正的帮助。因为这意味着我们必须依靠您真正了解您在这里所做的事情。

标签: java package


【解决方案1】:

你必须明白:

  • “真正的”类名总是the.complete.package.WhateverClass
  • 没有“子包”的概念。

当然,从 目录 的角度来看,a.ba.c 的类都将位于 a 目录中的文件夹中,但对于 a.b 中的任何内容,它仍然必须使用全名a.c.Whatever

因此您的导入看起来总是一样的,例如:

import com.pack1.subpack2.TheClass

换句话说:当您的代码位于a.b 中时,从a.cx.y.z 导入时没有区别,您只需始终给出完整的类名,所有属于它的包。

【讨论】:

  • 我想问的是包A中是否有两个包B和C,如果包B中的一个文件需要导入包C中存在的文件,我应该写什么导入语句如果我导入 A.C(A 不​​在 B 中),我的当前目录是 B 代码是如何工作的,它会抛出一个错误,说包 A.C 不存在。如果我的问题似乎不清楚,我非常抱歉。
  • 你的问题很清楚,我的回答解决了这个问题。我真的不知道还能说什么。忘记“子包”和目录。您总是简单地使用全名导入,其中包括所有包。没有“当前”包和其他“子包”上的“相对”视图之类的东西。它总是 import A.C. ...
猜你喜欢
  • 1970-01-01
  • 2012-11-13
  • 1970-01-01
  • 1970-01-01
  • 2011-05-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多