包含getter的接口或抽象类

时间:2014-01-27 22:10:50

标签: java enums

考虑我有几个类似于下面的枚举:

enum FooA {
    THREE(3), FOUR(4), SEVERN(7);

    private int x;

    private Foo(int x) {
        this.x = x;
    }
}

enum FooB {
    EIGHT(8), ONE(1), TEN(10);

    private int x;

    private Foo(int x) {
        this.x = x;
    }
}

如果我想添加一个在每个枚举中返回x的方法,我应该:

  • 将方法添加到每个枚举?
  • 创建一个包含x的抽象类,并且已经实现了getX方法。
  • 创建一个包含getX方法的接口,并为每个枚举实现它?

我问这个的原因是因为在我看来好像使用抽象类或接口过度使用它,特别是如果只是为了一个getter。

1 个答案:

答案 0 :(得分:0)

  

如果我想添加一个在每个枚举中返回x的方法,我应该:

     

将方法添加到每个枚举中?

也许,让我们先考虑其他两个选项。

  

创建一个包含x的抽象类,并且已经实现了getX方法。

如果你想尝试像enum FooA extends AbstractFoo这样的话,那我恐怕你运气不好。 Java中的所有enums都隐式地扩展了Enum类。 Java中的一个类最多可以扩展一个类,因此该选项已经用完了。

  

创建一个包含getX方法的接口,并为每个枚举实现它?

这是一种可能性,但你会遇到一些问题。您可以将变量x添加到接口,但它将是静态的,您必须在接口中初始化它,因此它在这里不是很有用。

这可能仍然是正确的解决方案(如果您希望能够互换地同时使用x枚举类型,则不会向接口添加getX(),只需添加Foo方法)你不会从中得到任何干嘛的好处。

所以至少对我的结论是你必须将方法添加到每个枚举,你可能想要使用一个接口。