如何使用枚举替换多个字段?如何将这些值传递给接口?

时间:2010-09-09 22:58:26

标签: java class interface enums

我有一个类,我需要能够设置和获取4个字段。我必须使用setter和getter,而且不使用常规字段,必须使用枚举。这个概念让我困惑 - 考虑到字段不一定是常数。我举一个例子

如果我们将类称为Bear,则4个字段可能是: 名称,类型,昵称,homeZoo。 请注意,所有字段都属于同一类型。

我需要方法setname(string)getname()等。

除了我对enum的困惑之外,我还必须能够将其中一个字段的设置值传递给接口 - 我是否必须在bear上实现接口?或者是否有某种方法可以将值赋予interfeace中的方法,因为枚举是一种公共静态最终类型的东西。

感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

这不是答案,但我无法将其纳入评论。也许这会帮助你澄清你的问题,如果没有别的。

类通常在您的实现中执行与其他类不同的操作。例如,如果你有一个熊类,你会期望它做一些与狗类不同的东西(狗可以摇摆,也许熊可以充电)。

但是,如果您只是跟踪Bears的动物园并且您也在跟踪狮子会,那么您想要的可能是包含“Bear”或“Lion”作为字段的Animals类。

现在,在这种情况下,熊和狮子可能是存储在Animal类中的枚举,以告诉动物是什么样的生物。这是你想要的吗?如果是这样,你的Animal类将有一个setBreed,你的枚举将是一个品种{熊,狮子......}。

答案 1 :(得分:0)

枚举通常无法替换多个字段。

它们用于尝试强制方法(或类似)的参数接受特定的预定义值。

当变量只能是3个不同的值之一时,请考虑使用枚举。

如果它只能是2个不同的值,则可以使用布尔值。如果您认为将来可能会添加第三个选项,可以使用枚举。

枚举的经典例子是扑克牌。

enum Colour{BLACK , RED}
enum Rank{A,2,3,4,5,6,7,8,9,10,J,Q,K}
enum Suit{SPADES,HEARTS,CLUBS,DIAMONDS}

排名超出上述限制集的卡片没有意义。因此可以使用枚举来表示它。

您可以声明一个界面

interface CheckSuit
{
    public boolean checkSuit( Suit suit );
}

以及实现它的类。

class CheckSpade implements CheckSuit
{
    public boolean checkSuit( Suit suit )
    {
        return ( suit == Suit.SPADES );
    }
}

以及一些使用它的代码。在这里,我们将suitChecker声明为接口CheckSuit的实例,并在将其指定为新的CheckSpade后,我们只能以多态方式与CheckSuit进行交互。我们不知道它是什么(至少不使用instanceof或类似的)

CheckSuit suitChecker = new CheckSpade();
Suit s = Suit.SPADES;
Suit d = Suit.DIAMONDS;
System.out.println( "s: " + suitChecker.checkSuit( s ) );
System.out.println( "d: " + suitChecker.checkSuit( d ) );