有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java枚举与简单常量声明?

我刚刚开始理解Java中枚举的概念,但我仍然对自己的理解持怀疑态度

例如:方向,我能理解它的用法,我用数字来表示方向,但从来没有真正需要用它做算术

然而,给定一些类似大小的东西,其中大小是常量,但我需要做算术运算,最终声明是否更合适?或者尝试使用

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
}

请注意,这是一个私有嵌套类, 我在画图时也使用这些值,参数是整数,我只是做大小。然而,对于这种情况,枚举是否更合适?我该怎么做呢


共 (3) 个答案

  1. # 1 楼答案

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

    在上下文中,使用枚举以这种方式替换大小值是毫无意义的。如果你的物品有30个单位大,那么你需要用一个整数或类似的数字来表示它

    在类似的上下文中使用枚举的一个例子是,如果您有5种严格定义的不同大小的项类型(在本例中,您可以将5种类型中的每一种都作为枚举的实例),但它们内部仍然有一个大小变量,每个变量的值不同

  2. # 2 楼答案

    需要一些界面欺骗,但这是有效的。在你的情况下,这不一定是最好的方法,但这是一个巧妙的小练习

    /**
       <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
    
  3. # 3 楼答案

    Enum的全部目的是使代码更具可读性和可维护性。在需要表示枚举的元素集时,应该随时使用它们

    然而,在这种情况下,final/constant更合适,因为您代表的是一个值(框的数量和像素的数量),而不是枚举集。比如说,如果你想储存不同类型的盒子(金属盒、纸板盒等),那么你可以使用Enum