用java演示包名冲突

用java演示包名冲突,java,packages,Java,Packages,我把这个问题当作作业来问: 包/命名 我们已经创建了很多包,并在其中定义了类和接口。我们还讨论了命名它们时必须记住的一点。在本作业中,我们将了解命名的重要性 请更改上一次分配中的包名称,使两个包具有相同的名称,并分析将抛出的结果/错误 我的怀疑: 我想不出一个方法(场景)来证明所问的问题。 由于Java导入是绝对的,所以所描述的情况似乎不可能产生(IMO) 请帮我演示一下这个东西 提前感谢:)这在很大程度上取决于您正在运行的代码 导致包名冲突的唯一方法是在类路径上放置两个单独的JAR,这两个JA

我把这个问题当作作业来问:

包/命名

我们已经创建了很多包,并在其中定义了类和接口。我们还讨论了命名它们时必须记住的一点。在本作业中,我们将了解命名的重要性

请更改上一次分配中的包名称,使两个包具有相同的名称,并分析将抛出的结果/错误

我的怀疑:

我想不出一个方法(场景)来证明所问的问题。 由于Java导入是绝对的,所以所描述的情况似乎不可能产生(IMO)

请帮我演示一下这个东西


提前感谢:)

这在很大程度上取决于您正在运行的代码

导致包名冲突的唯一方法是在类路径上放置两个单独的JAR,这两个JAR都包含同一个包中的类。如果所有类名都不冲突,则不存在冲突。如果某些类名发生冲突,那么JVM将尝试从类路径前面的jar加载它们。当某些类只在后面的jar中,而后面jar中的类使用的类的名称也在前面的jar中使用时,就会发生错误。错误的性质取决于使用类型


(我应该澄清,这个答案适用于纯Java,与任何特定IDE或构建系统如何为项目生成JAR无关。)

是的,如果更改包名,还需要更改导入。如果您碰巧使用Eclipse,有一种简单的方法可以做到这一点。在PackageExplorer视图中,右键单击包并执行重构->重命名。它将重命名包并更新其他类中的所有相关导入

以下是它的工作原理:

JavaProjectA
   src
     com.some.package
         ClassA
JavaProjectB
   src
     com.another.package
         ClassA
到目前为止还不错。由于其包结构,每个类都是唯一的。但是,可以创建以下内容:

JavaProjectA
   src
     com.some.package
         ClassA
JavaProjectB
   src
     com.some.package
         ClassA

这些ClassA类中只有一个将导出到jar中并在运行时使用。

请记住,您可以有多个类路径;)如果包位于两个独立的库中,这是可能的……我认为了解您在这个类中使用的IDE会很有用。在我看来,这可能与您的IDE有关。这是实验室作业还是家庭作业?问问你的老师/教授/助教/导师。正如所说的,这是一项非常令人困惑的任务:你的直觉是正确的。@MarkPeters:我只是想确定我的直觉是否正确。谢谢。:)那么位于不同项目中的相同类和包名呢,它们都是同一个jar的一部分?jar将只包含其中一个类(但会在jar生成时警告您)@Chris:不确定您这里所说的“project”是什么意思,因为“project”本质上不是Java概念。但是在同一个Jar中不能有两个具有相同完全限定名的类文件;这是不可能的。@MarkPeters-是的,在罐子里是不可能的,但在工作空间里是完全可能的,这就是我的观点。您可能会创建代码或将代码拉入到您的工作区,该工作区不小心与另一个项目中的代码具有相同的包和类名,导出一个jar,但没有意识到发生了冲突(因此丢失了一个类)。p、 我所说的“项目”是指Java项目的Eclipse习惯用法。