Java将类定义为枚举值,而不是其他类型

Java将类定义为枚举值,而不是其他类型,java,Java,我是Java中使用enums的新手,我想用它来代替其他类型,如String或int。在下面的代码中,我希望有一些值作为枚举,从类构造函数中设置它,然后通过getter获得它,我的代码是不正确的,在更多的谷歌搜索之后,我似乎无法修复它 谢谢你 public class SampleEvent { private enum path { LEFT , RIGHT } public SampleEvent(path p) { p

我是Java中使用
enum
s的新手,我想用它来代替其他类型,如
String
int
。在下面的代码中,我希望有一些值作为
枚举
,从类
构造函数
中设置它,然后通过
getter
获得它,我的代码是不正确的,在更多的谷歌搜索之后,我似乎无法修复它

谢谢你

public class SampleEvent {
    private enum path {
        LEFT ,
        RIGHT
    }

    public SampleEvent(path p) {
        path = p;
    }

    public enum getPath(){
        return path;
    }
}

您的代码应该如下所示

public class SampleEvent {
    public enum PATH {
        LEFT ,
        RIGHT
    }

    private PATH val;

    public SampleEvent(PATH p) {
        val = p;
    }

    public PATH getPath(){
        return val;
    }

    public static void main(String[] args) {
        SampleEvent se = new SampleEvent(PATH.LEFT);
        System.out.println(se.getPath());
    }
}

并且输出为左

您必须创建枚举类型的成员变量,并且您的
getPath
方法应该具有正确的返回类型

您还必须使枚举
公开
,否则将无法从类外部调用构造函数(类外部的代码将无法访问枚举类型)

试试这个

   public class SampleEvent {

    public enum Path {
        LEFT ,
        RIGHT
    }

    private Path path;

    public SampleEvent(SampleEvent.Path path) {
        this.path = path;
    }

    public SampleEvent.Path getPath() {
        return path;
    }
}

如果SampleEvent可以是不可变的,那么最好是这样:
private final path val我还将路径枚举名设置为“path”以遵循命名约定。并且该枚举应该是公共的。@Fildor感谢您的帮助inputs@Jesper你会主张路径域是最终的吗?当然,如果SampleEvent是不可变的话,那么就是这样。@Fildor是的,但我不想在我的答案中加入太多信息。使类不可变通常是一个好主意。
   public class SampleEvent {

    public enum Path {
        LEFT ,
        RIGHT
    }

    private Path path;

    public SampleEvent(SampleEvent.Path path) {
        this.path = path;
    }

    public SampleEvent.Path getPath() {
        return path;
    }
}