枚举与简单的常量声明?

时间:2014-01-28 02:52:46

标签: java variables enums final

我刚刚开始理解Java中Enumeration的概念,但我仍然对我的理解持怀疑态度。

对于像:Direction这样的东西,我可以理解它的用法,我使用数字来表示方向,但从来不需要用它来算术。

但是,考虑到尺寸是大小的常量,但是我需要做算术,最终声明会更合适吗?或尝试使用

进行枚举
public int getSize()
{
    return size;
}

这是我当前声明的代码:

private static class Size
{
    private static final int BOX = 5; //5 pixels
    private static final int GRID = 30; //amount of boxes
    private static final int GAME = BOX * GRID; //total size in pixels
}

请注意,这是一个私有嵌套类, 我在绘图时也使用这些值,并且参数是一个整数,我只是做Size.BOX,但是,Enumeration更适合这个吗?我应该怎么做呢?

3 个答案:

答案 0 :(得分:2)

整个枚举点是让您的代码更具可读性和可维护性。您应该在需要表示枚举元素集时随时使用它们。

但是,在这种情况下,最终/常量更合适,因为您表示的值(框数和像素数)不是枚举集。例如,如果您想存储各种类型的盒子(金属盒,纸板盒等),那么您将使用枚举。

答案 1 :(得分:1)

您认为枚举在处理算术值时不合适是正确的。枚举对于表示彼此相关的唯一定义项的集合(在编程和数学意义上)非常有用。

使用枚举以这种方式替换大小值在上下文中是无意义的。如果您的商品是30个单位,那么您需要使用整数等来表示

在类似的上下文中使用枚举的一个示例是,如果您有5种不同大小的严格定义的项目类型 - 在这种情况下,您可以使5中的每一个都成为枚举的实例 - 但它们会内部仍有一个大小变量,每个都有不同的值。

答案 2 :(得分:1)

采取一些界面诡计,但这是有效的。在你的情况下,这不一定是最好的方法,但这是一个很好的小练习。

/**
   <P>{@code java EnumXmpl}</P>
 **/
public class EnumXmpl  {
   public static final void main(String[] igno_red)  {
      System.out.println("BOX: " + eShape.BOX.getSize());
      System.out.println("GRID: " + eShape.GRID.getSize());
      System.out.println("GAME: " + eShape.GAME.getSize());
   }
}

interface ShapeConstants  {
   int iBOX_PXLS = 5;
   int iGRID_BOXES = 30;
}
enum eShape implements ShapeConstants  {
   BOX(iBOX_PXLS),
   GRID(iGRID_BOXES),
   GAME(iBOX_PXLS * iGRID_BOXES);

   private final int iSz;

   eShape(int i_size)  {
      iSz = i_size;
   }
   public final int getSize()  {
      return  iSz;
   }
}

输出:

[C:\java_code\]java EnumXmpl
BOX: 5
GRID: 30
GAME: 150