java 枚举 共_java – 继承公共接口的枚举中的代码重复

如果您可以使用一个级别的间接,那么我在下面介绍的方法会将重复的代码减少到最小.

首先,考虑以下供应商界面及其内部类:

public interface PropertiesSupplier {

Properties properties();

public static final class Properties {

private final int value1;

private final String value2;

private final double value3;

private Properties(int value1,String value2,double value3) {

this.value1 = value1;

this.value2 = value2;

this.value3 = value3;

}

public static Properties of(int value1,double value3) {

return new Properties(value1,value2,value3);

}

public int getValue1() {

return this.value1;

}

public String getValue2() {

return this.value2;

}

public double getValue3() {

return this.value3;

}

@Override

public String toString() {

return "Properties [value1=" + this.value1 + ",value2=" + this.value2 + ",value3=" + this.value3

+ "]";

}

}

}

这里没什么神奇的.内部类只是一个带有私有final字段的bean,一个用于初始化它们的私有构造函数,public getter,一个工厂方法和一个覆盖toString()方法.该接口仅定义一个返回内部类实例的方法.请注意,内部类是最终的.我们的想法是强制实现不变性,以便不允许其属性发生变化.

然后,让我们创建几个将实现此接口的枚举.让我们从MyEnum1开始,它定义了两个值:

public enum MyEnum1 implements PropertiesSupplier {

ENUM_1_CONST_1(Properties.of(1,"hello",0.123)),ENUM_1_CONST_2(Properties.of(2,"goodbye",7.54));

private final Properties p;

private MyEnum1(Properties p) {

this.p = p;

}

@Override

public Properties properties() {

return this.p;

}

}

接下来是MyEnum2,它只定义了一个值:

public enum MyEnum2 implements PropertiesSupplier {

ENUM_2_CONST_1(Properties.of(9,"hey dude",547.21578));

private final Properties p;

private MyEnum2(Properties p) {

this.p = p;

}

@Override

public Properties properties() {

return this.p;

}

}

如您所见,两个枚举都实现了PropertiesSupplier接口,因此它们必须为Properties属性()方法提供实现.为了符合这一点,他们必须封装他们在构造函数中接收的Properties实例.

所以现在,在这个间接之后,在所有枚举中重复的唯一代码只是属性字段,接收它作为参数的构造函数及其getter方法.

这是一个展示如何使用枚举的示例:

MyEnum1 e1 = MyEnum1.ENUM_1_CONST_2;

MyEnum2 e2 = MyEnum2.ENUM_2_CONST_1;

System.out.println(e1.name() + " - " + e1.properties());

System.out.println(e2.name() + " - " + e2.properties());

ENUM_1_CONST_2 - Properties [value1=2,value2=goodbye,value3=7.54]

ENUM_2_CONST_1 - Properties [value1=9,value2=hey dude,value3=547.21578]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值