Java-Don';我不知道如何调用公共枚举类

Java-Don';我不知道如何调用公共枚举类,java,Java,我对Java有点陌生 下面是我想要实现的Java源代码 首先,我定义一个公共枚举类,如下所示: public enum Day { SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY } import java.time.*; public class EnumTest { Day day; public EnumTest(Day day) { this.day = day; } public void

我对Java有点陌生

下面是我想要实现的Java源代码

首先,我定义一个公共枚举类,如下所示:

public enum Day {
SUNDAY, MONDAY, TUESDAY, WEDNESDAY,
THURSDAY, FRIDAY, SATURDAY 
}
import java.time.*;

public class EnumTest {
Day day;

public EnumTest(Day day) {
    this.day = day;
}

public void tellItLikeItIs() {
    switch (day) {
        case MONDAY:
            System.out.println("Mondays are bad.");
            break;

        case FRIDAY:
            System.out.println("Fridays are better.");
            break;

        case SATURDAY: case SUNDAY:
            System.out.println("Weekends are best.");
            break;

        default:
            System.out.println("Midweek days are so-so.");
            break;
    }
}

public static void main(String[] args) {
    EnumTest firstDay = new EnumTest(Day.MONDAY);
    firstDay.tellItLikeItIs();
    EnumTest thirdDay = new EnumTest(Day.WEDNESDAY);
    thirdDay.tellItLikeItIs();
    EnumTest fifthDay = new EnumTest(Day.FRIDAY);
    fifthDay.tellItLikeItIs();
    EnumTest sixthDay = new EnumTest(Day.SATURDAY);
    sixthDay.tellItLikeItIs();
    EnumTest seventhDay = new EnumTest(Day.SUNDAY);
    seventhDay.tellItLikeItIs();
}
}
现在我创建了一个这样的类:

public enum Day {
SUNDAY, MONDAY, TUESDAY, WEDNESDAY,
THURSDAY, FRIDAY, SATURDAY 
}
import java.time.*;

public class EnumTest {
Day day;

public EnumTest(Day day) {
    this.day = day;
}

public void tellItLikeItIs() {
    switch (day) {
        case MONDAY:
            System.out.println("Mondays are bad.");
            break;

        case FRIDAY:
            System.out.println("Fridays are better.");
            break;

        case SATURDAY: case SUNDAY:
            System.out.println("Weekends are best.");
            break;

        default:
            System.out.println("Midweek days are so-so.");
            break;
    }
}

public static void main(String[] args) {
    EnumTest firstDay = new EnumTest(Day.MONDAY);
    firstDay.tellItLikeItIs();
    EnumTest thirdDay = new EnumTest(Day.WEDNESDAY);
    thirdDay.tellItLikeItIs();
    EnumTest fifthDay = new EnumTest(Day.FRIDAY);
    fifthDay.tellItLikeItIs();
    EnumTest sixthDay = new EnumTest(Day.SATURDAY);
    sixthDay.tellItLikeItIs();
    EnumTest seventhDay = new EnumTest(Day.SUNDAY);
    seventhDay.tellItLikeItIs();
}
}
编译EnumTest类“时,出现以下错误:

C:\java>javac EnumTest.java
EnumTest.java:4: error: class Day is public, should be declared in a file named
Day.java
public enum Day {
   ^
1 error
你能帮我吗? 非常感谢。
Meir

您的代码看起来不错,出现错误是因为您正在同一文件下保存两个公共类(枚举也是类)

创建两个单独的文件并在其中写入enum,将其另存为
Day.java
。和另一个使用
类EnumTest
的文件,并将其另存为
EnumTest.java
别忘了把它们放在同一个包裹里。否则,您必须使用
import packagename.Day

更简单的方法是从Enum中删除
public

     enum Day {
      SUNDAY, MONDAY, TUESDAY, WEDNESDAY,
      THURSDAY, FRIDAY, SATURDAY 
      }

现在您的代码将编译

您的代码看起来很好,出现错误是因为您正在同一文件下保存两个公共类(枚举也是类)

创建两个单独的文件并在其中写入enum,将其另存为
Day.java
。和另一个使用
类EnumTest
的文件,并将其另存为
EnumTest.java
别忘了把它们放在同一个包裹里。否则,您必须使用
import packagename.Day

更简单的方法是从Enum中删除
public

     enum Day {
      SUNDAY, MONDAY, TUESDAY, WEDNESDAY,
      THURSDAY, FRIDAY, SATURDAY 
      }

现在您的代码将编译

通常所有的
公共
类/枚举/接口都在单个文件中定义(so Day.java、EnumTest.java等等)

但是您不必将类/枚举/接口
设置为公共的
,除非它是从外部访问的:

enum Day { ... }

public class EnumTest {
    Day day;
    ...

通常,所有的
public
类/enum/接口都在单个文件中定义(so Day.java、EnumTest.java等等)

但是您不必将类/枚举/接口
设置为公共的
,除非它是从外部访问的:

enum Day { ... }

public class EnumTest {
    Day day;
    ...

这两个类都在同一个文件中吗?错误消息说明了这一切:class Day是公共的,应该在名为Day.javas的文件中声明,因为RobbyCornelissen提到编译器希望在其自己的源文件中使用Day枚举(枚举在内部作为类处理)。问题不在于“调用”枚举的位置,问题就在你介绍它的那一行。顺便说一句,如果你使用IDE,它们会自动修复这类问题,它们不仅会为你编译代码,还会帮助你修复代码。我更喜欢IntelliJ。这两个类在同一个文件中吗?错误消息说明了这一切:class Day是公共的,应该在一个名为Day.javas的文件中声明。RobbyCornelissen提到编译器希望在其自己的源文件中使用Day enum(enum在内部作为类处理)。问题不在于“调用”enum的位置,问题就在你介绍它的那一行。顺便说一句,如果你使用IDE,它们会自动修复这类问题,它们不仅会为你编译代码,还会帮助你修复代码。我更喜欢智力。