Java 区分大小写 : Class file collision: A resource exists with a different case

标签 java eclipse

我在 Windows 操作系统中,在 eclipse IDE 中工作,我有以下两种情况:

<强>1。我创建了下面的类,它位于 Employee.java 类中(E 为大写):

public class Employee {
    public static void main(String[] args) {
        employee emp = new employee();
        emp.test();
    }
}

//here e is in lowercase
class employee {
    public void test() {
        System.out.println("I am in test()");
    }
}

在这种情况下,我得到了以下异常:

Exception in thread "main" java.lang.NoClassDefFoundError: employee (wrong name: Employee)
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(Unknown Source)
.
.
.
at Employee.main(Employee.java:4) // i.e at emp.test();

<强>2。我创建了下面的类,这是 Employee.java 类:

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

    }
}

现在,当我尝试在同一个包中创建employee.java(e为小写)类时,我在Eclipse中收到消息:存在具有相同名称但大小写不同的类型。

我的问题是:Java 区分大小写。这是否意味着 JVM(基于 Windows 和 UNIX)区分大小写,或者编译器区分大小写?以及为什么它在场景 1 中给出了异常,而 Eclipse 不允许我在场景 2 中的同一位置创建employee.java 文件。

还记得我使用的是 Windows 操作系统,它的文件名不区分大小写,所以我知道它不允许 employee.java 和 Employee.java 位于同一位置。 这是否违反了 Java 大小写敏感性?

最佳答案

这不是 Java 的限制,而是您尝试写入文件的 Windows 文件系统的限制。在不区分大小写的文件系统上,编译器无法将 Employee.classemployee.class 都写入磁盘,因为就 FS 而言,它们是相同的文件.

如果您能以某种方式编译到区分大小写的文件系统(例如在 Linux 上),然后将生成的类文件打包到 JAR 中,那么您将能够在 Windows 上从该 JAR 运行而不会出现错误,作为 ZIP文件能够包含两个不同的条目,其名称仅大小写不同。

关于Java 区分大小写 : Class file collision: A resource exists with a different case,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25810791/

相关文章:

java - 如何在远程tomcat服务器上使用依赖库部署war

eclipse - 2015 年登录 Java - 正确配置的环境是什么样的?

java - 二进制转十六进制无预定义方法(JAVA)

java - 如何从/向 CellList 添加或删除单个元素?

java - Hibernate java.util.ArrayList 无法转换..类转换异常

java - 多线程访问非同步Map

eclipse - 如何为HDP 2.2安装eclipse插件

java - Node<T> 解释树

java - Eclipse 中 NCrunch for Java 的等价物

java - 如何为我自己的项目正确导入 commons.apache.math 库