Java 为什么我不能将我的枚举声明为公共枚举?

Java 为什么我不能将我的枚举声明为公共枚举?,java,enums,Java,Enums,我在类之外声明一个enum,如下所示: public enum CoffeeSize{SMALL, BIG, HUGE} class Coffee{ CoffeeSize size; } public class CoffeTest { public static void main(String[] args) { Coffee myCoffee = new Coffee(); myCoffee.size = CoffeeSize.BIG;

我在类之外声明一个enum,如下所示:

public enum CoffeeSize{SMALL, BIG, HUGE}

class Coffee{
    CoffeeSize size;
}

public class CoffeTest {
    public static void main(String[] args) {
        Coffee myCoffee = new Coffee();
        myCoffee.size = CoffeeSize.BIG;
    }
}
但我在标记枚举“public”时遇到以下错误:

必须在自己的文件中定义公共类型的咖啡大小。

我记得在某个地方读到,我们可以使用访问修饰符(而不是private和protected)在类外部声明enum

谁能告诉我为什么会这样?我的代码有什么问题?
在自己的文件中包含我的enum意味着什么?

因为在同一个java文件中不能有两个公共类或enum:

在您的代码中:
1. <代码>公共类协同测试{
2.
public enum CoffeeSize{


因此,您需要在其他文件中移出一个文件:

要将枚举移到自己的文件中,请创建一个名为
CoffeeSize.java
的新文件,并将枚举代码放在那里。

实际上,主要原因是您的文件名和公共类名不同,因此会出现此错误ne顶级类型,例如类、枚举接口抽象等。如果确实希望此枚举在此类中,请删除公共访问修饰符,否则将其移动到新文件CoffeeSize.java。希望这有帮助。

或者,按照编译器的指示,将
CoffeeSize
放在它自己的类文件(CoffeeSize.java)中或者在
保险箱中移动
类声明…“我记得在某个地方读过”-我敢打赌,如果你找到了你所指的“某处”,它实际上并没有说出你认为它说了什么。这与任何其他类或接口都是一样的。
javac
如果你有一个顶级的
公共类ABC
,并且它不在
ABC.java
中,你会不喜欢它。enums也是这样。嗯……叫它
CoffeeSize.java
,而不是
CoffeeSize.class
。让java编译器生成
.class
文件。这方面做得很好。哦,你是对的。我想我需要睡觉了。-修复