从不同的包(Java)导入嵌套在另一个类中的枚举

从不同的包(Java)导入嵌套在另一个类中的枚举,java,enums,Java,Enums,如何将在另一个类中声明的枚举的值传递给该类的方法 在与定义枚举的包不同的另一个类中,我将枚举声明为: public static enum Status { SUCCESS, FAILURE; } 我尝试使用import static导入枚举,如下所示: import static com.org.xx.yy.classname.Status and import com.org.xx.yy.classname.Status; 对于我的测试程序中的这两种情况,我能够编译,但我得到了一

如何将在另一个类中声明的枚举的值传递给该类的方法

在与定义枚举的包不同的另一个类中,我将枚举声明为:

public static enum Status
{
  SUCCESS, FAILURE;
}
我尝试使用import static导入枚举,如下所示:

import static com.org.xx.yy.classname.Status

and

import com.org.xx.yy.classname.Status;
对于我的测试程序中的这两种情况,我能够编译,但我得到了一个运行时错误:

Exception in thread "main" java.lang.NoClassDefFoundError: com.org.xx.yy.classname$Status

如果您没有因为缺少该类而得到编译错误,但是您得到的是运行时
NoClassDefFoundError
,那么这意味着您必须在编译时链接该类,而没有实际将其编译为可执行代码,然后您在类路径上没有该类的情况下运行代码,这样它就找不到该类

确保构建路径设置正确,以编译该类并尝试重新构建项目,或者,如果该类应该是外部类,则在运行时将其添加到类路径

这为我编译并打印出
“SUCCESS”

Main.java

package com.xx.yy.Main;
import com.aa.bb.OtherClass.Status; // <-- Other class in other package

public class Main {
    public static void main(String[] args) {
        System.out.println(Status.SUCCESS.name());
    }
}
package com.aa.bb;

public class OtherClass {
    public static enum Status {
        SUCCESS, FAILURE;
    }
}

枚举和嵌套枚举-包本地、最终和静态。无需设置静态枚举。导入com.org.xx.yy.classname.Status应该可以工作。

无需使用静态导入,只需使用
import com.org.xx.yy.classname.Status你应该得到编译错误,而不是运行时错误。。我尝试了这两种情况,但仍然得到相同的运行时错误,即找不到该类。我不知道为什么它会将枚举作为一个类来处理。如果您遇到运行时NoClassDefFoundError,那么您可能只需要重新编译包含枚举的包/类。除此之外,这可能是版本控制问题。由于某些原因,您的类不在类路径中,或者您的模块配置不正确。您的代码可以编译。这毕竟是一个运行时异常。正如其他人所说,您必须确保包含枚举的类是正确生成的,并且重建包将替换旧的类。这可能意味着清理项目。您知道是什么导致了NoClassDefFoundError
?你读过那门课的javadoc吗?基本上,这意味着您的编译时类路径(或者模块路径,我不知道,因为我看不到您使用的java版本)与您的运行时类路径(或者模块路径)不同。您如何编译java代码以及如何运行它?