Java 接口与枚举

Java 接口与枚举,java,enums,Java,Enums,在接口和枚举之间,哪一个更适合声明常量?为什么会这样?最好使用枚举来声明常量,因为接口的目标位于完全不同的级别。是的,有很多接口都有一个公共静态final常量,但我觉得枚举的唯一任务是为您提供这些常量。接口设计用于定义常见行为,枚举用于定义常见值 枚举表示一个实值,可以与另一个值进行比较,也可以轻松地存储在数据库中。 您还可以有一个标志enum(在C#中,Java中不知道),它允许您对enum的值(AND、OR、XOR等)执行二进制操作。如果您的常量有特定类型的原因,如果它们需要某种行为(即方法

在接口和枚举之间,哪一个更适合声明常量?为什么会这样?

最好使用枚举来声明常量,因为接口的目标位于完全不同的级别。是的,有很多接口都有一个
公共静态final
常量,但我觉得枚举的唯一任务是为您提供这些常量。

接口设计用于定义常见行为,枚举用于定义常见值

枚举表示一个实值,可以与另一个值进行比较,也可以轻松地存储在数据库中。
您还可以有一个标志enum(在C#中,Java中不知道),它允许您对enum的值(AND、OR、XOR等)执行二进制操作。

如果您的常量有特定类型的原因,如果它们需要某种行为(即方法),或者如果它们是其他值的组合,则可以使用
enum
s

例如,假设您正在实施一个纸牌游戏,并且希望表示价值观和套装:

enum Rank { 
    ACE, TWO, THREE, FOUR, FIVE, SIX, SEVEN, 
    EIGHT, NINE, TEN, JACK, QUEEN, KING; 
}
enum Suit { SPADES, CLUBS, DIAMONDS, HEARTS } 
在那里,现在不可能用假西装或假军衔制作卡片

不过,有时候,您只是对在某个地方声明一堆常用值感兴趣。在这种情况下,将它们放入
enum
将是不必要的工作,因为这些常量只是一种工具,可以避免我们在计算圆的周长或其他东西时记住所有小数,例如π。哪个看起来更好

// Using enum:
enum MathConstant { 
    PI(3.14159265358979323846), E(2.7182818284590452354);
    private final double value;
    MathConstant(double v) { value = v; }
    public double value() { return value; } 
}
// Usage:
double circumference = MathConstant.PI.value() * diameter;

// Using a constant class:
final class MathConstants { 
    private MathConstants() { throw new UnsupportedOperationException(); }
    public static final double PI = 3.14159265358979323846,
                               E = 2.7182818284590452354;
}
// Usage:
double circumference = MathConstants.PI * diameter;

至于接口:永远不要在接口中放置常量。“常量接口”模式是错误的(),自从Java中添加了
import static
以来,使用它的唯一参数已变得无效。

如果您使用Java 5或更高版本,则Enum是一种方法。唯一的例外是,如果您的常量列表是打开的,并且可以扩展。无法扩展枚举。另一个例外是,如果它是单个值,如MAX_整数。

只是一个代码:

公共接口InterfaceForConstants(){
字符串**TOTO**=“等等!”;
双**PI**=3.14159265358979323846;
}
使用:

class ClasseName实现InterfaceForConstants(){
字符串myString;
if(myString.equals(**TOTO**){
//做点什么
}
双圆周=**PI***直径;//代替MathConstants.PI*直径;
}
干净和简单。如果有什么东西可以做你需要的,就拿最简单的吧! 按照规则编写代码是好的,编写易于阅读的代码更好,即使规则不受尊重。想想几个月后你什么时候必须阅读代码。
如果你想说得更具体一些,可以用javadoc来解释它!

公共静态final常量来自
enum
:)@Bombe之前的某个时间,这并不完全正确。如果说,
java.lang.Math
今天被重写,
PI
E
仍将被声明为
公共静态最终双精度
常量。当然,是的,因为我上次检查的
Math
不是一个接口。在java中,枚举基本上是(常量)类,因此,与.NET4.0之前的c#中的枚举相比,使用它们可以做更多的工作。我认为C#/.NET4.0将实现这个功能。@Tedil:C#4.0功能集已经完成。它不包括增强的OO枚举。Apache的公共接口HttpStatus将常量放入接口中,您建议不要这样做。示例-int SC_OK=200;类可以通过HttpStatus的静态导入使用这些常量。界面的使用仍然是个问题吗?嗯,有点。反对使用常量接口的主要原因是,它使
实现接口变得简单和舒适,而不必导入常量。也有语义上的原因反对它;接口是一组可以实现的行为,而不是一堆常量。现在,类在语义上也不是放置常量的正确位置,但是它们可以被设置为final和unstantiable,这使得它们的行为更像子名称空间,而不是类(这是我们想要的)。这不是干净的,这是多余的