繁体   English   中英

如何在 java 中从构造函数更改为枚举?

[英]How to change from Constructors to Enum in java?

我有这些整数和这个使用构造函数的方法,但我应该把它改成一个枚举,因为这个代码已经过时了。 我确实理解 Enums 在理论上是如何工作的,但无论我试图改变什么,我都做错了。

public static final int CHILDRENS = 2;
public static final int REGULAR = 0;
public static final int NEW_RELEASE = 1;

private Price price;

public void setPriceCode(int priceCode) {
    
    switch (priceCode) {
    case REGULAR:
        price = new RegularPrice();
        break;
    case CHILDRENS:
        price = new ChildrensPrice();
        break;
    case NEW_RELEASE:
        price = new NewReleasePrice();
        break;
    default:
        throw new IllegalArgumentException("Incorrect Price Code");
    }
}

我认为要更改为枚举,我应该首先删除顶部的给定整数,然后在方法之前添加它:

enum cases {
    REGULAR, CHILDRENS, NEW_RELEASE;
}

现在我不知道如何相应地更改方法的代码。 如何给案例提供整数,我不应该删除这些:?

public static final int CHILDRENS = 2;

我应该如何相应地更改我的开关盒? 真的很感激一些帮助,我看了一堆关于枚举的视频,但情况却大不相同。

像这样做:

enum PriceCode {
    REGULAR(0), // calls constructor with value 0
    NEW_RELEASE(1), // calls constructor with value 1
    CHILDREN(2) // calls constructor with value 2
    ;

    private final int priceCode;

    private PriceCode(int priceCode) {
        this.priceCode = priceCode;
    }

    int value() {
        return priceCode;
    }
}

public class Main {
    // Usage
    public static void setPriceCode(PriceCode priceCode) {
        System.out.println("The value of " + priceCode + " is " + priceCode.value());
        switch (priceCode) {
        case REGULAR:
            // Do something
            break;
        case CHILDREN:
            // Do something
            break;
        case NEW_RELEASE:
            // Do something
            break;
        default:
            throw new IllegalArgumentException("Incorrect Price Code");
        }
    }

    public static void main(String[] args) {
        // Set price code as CHILDREN
        setPriceCode(PriceCode.CHILDREN);

        // Another sample usage
        System.out.println("Price code of NEW_RELEASE is " + PriceCode.NEW_RELEASE.value());
    }
}

Output:

The value of CHILDREN is 2
Price code of NEW_RELEASE is 1

Oracle 的 Java 教程中了解有关枚举和枚举构造函数的更多信息。

枚举视为 class 或接口,换句话说,它是一种类型。 我推荐以下教程: 枚举类型根据 java 编码约定,类型名称应以大写字母开头。 因此,在下面的代码中,我将枚举的名称更改为Cases

因此方法setPriceCode的参数应该是Cases 代码的rest保持不变。

enum Cases {
    REGULAR, CHILDRENS, NEW_RELEASE;
}

private Price price;

public void setPriceCode(Cases priceCode) {
    
    switch (priceCode) {
    case REGULAR:
        price = new RegularPrice();
        break;
    case CHILDRENS:
        price = new ChildrensPrice();
        break;
    case NEW_RELEASE:
        price = new NewReleasePrice();
        break;
    default:
        throw new IllegalArgumentException("Incorrect Price Code");
    }
}

这是对方法setPriceCode()的示例调用

setPriceCode(Cases.CHILDRENS);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM