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,这使得它们的行为更像子名称空间,而不是类(这是我们想要的)。这不是干净的,这是多余的