Java 枚举类型怎么传参

问题背景

在Java中,枚举类型是一种特殊的数据类型,用于定义一组常量。枚举类型可以作为方法的参数类型,但有时需要在枚举类型中传递更多的参数来实现更复杂的功能。那么如何在Java中传递参数给枚举类型呢?

解决方案

方案一:在枚举类型中添加成员变量

最常见的解决方案是在枚举类型中添加成员变量来传递参数。以下是一个示例:

public enum Fruit {
    APPLE("red", 100),
    ORANGE("orange", 150),
    BANANA("yellow", 120);

    private final String color;
    private final int weight;

    Fruit(String color, int weight) {
        this.color = color;
        this.weight = weight;
    }

    public String getColor() {
        return color;
    }

    public int getWeight() {
        return weight;
    }
}

在上面的示例中,我们定义了一个Fruit枚举类型,它包含三个常量:APPLEORANGEBANANA。每个常量都有一个colorweight参数,通过构造函数进行初始化。我们还提供了getColor()getWeight()方法来获取相应的参数值。

通过这种方式,我们可以在枚举类型中传递额外的参数,以实现更灵活的功能。例如,我们可以使用Fruit.APPLE.getColor()来获取APPLE的颜色。

方案二:在枚举类型中定义抽象方法

除了在枚举类型中添加成员变量,我们还可以在枚举类型中定义抽象方法来传递参数。以下是一个示例:

public enum Currency {
    USD {
        @Override
        public double getExchangeRate() {
            return 1.0;
        }
    },
    EUR {
        @Override
        public double getExchangeRate() {
            return 0.85;
        }
    },
    GBP {
        @Override
        public double getExchangeRate() {
            return 0.72;
        }
    };

    public abstract double getExchangeRate();
}

在上面的示例中,我们定义了一个Currency枚举类型,它包含三个常量:USDEURGBP。每个常量都实现了getExchangeRate()抽象方法,用于返回相应的汇率。

通过这种方式,我们可以在枚举类型中定义不同的行为,以实现更复杂的功能。例如,我们可以使用Currency.USD.getExchangeRate()来获取美元的汇率。

类图

下面是FruitCurrency两个枚举类型的类图:

classDiagram
    class Fruit {
        - color: String
        - weight: int
        + Fruit(String color, int weight)
        + getColor(): String
        + getWeight(): int
    }
    
    class Currency {
        + USD
        + EUR
        + GBP
        + getExchangeRate(): double
    }

总结

通过在枚举类型中添加成员变量或定义抽象方法,我们可以在Java中传递参数给枚举类型。这样可以使枚举类型更灵活、更具有扩展性。在实际的开发中,我们可以根据具体的需求选择合适的方案来解决问题。

引用

  • [Java Enums - Tutorial](
  • [Enums in Java](
  • [Effective Java - Item 34: Use enums instead of int constants](