Java 枚举来进行计算

Java 枚举来进行计算,java,enums,Java,Enums,我们可以将对象传递给枚举抽象方法并在枚举中进行计算吗?这是一个场景,我有四个常量,每个常量都有自己的值。根据这些常数,我将用我的方法进行计算。。相反,我希望在enum中进行计算,并希望得到响应。要在enum中进行计算,我必须将两个/三个引用对象传递给enum方法 EX:把学校看作EnUM,常量是教师(低级别访问),学生(NoAccess),Office管理员(Office访问)。p> 在enum中,我有一个抽象方法进程,它接收用户POJO,字符串作为参数,更新对象中的一些字段,并将相同的用户P

我们可以将对象传递给枚举抽象方法并在枚举中进行计算吗?这是一个场景,我有四个常量,每个常量都有自己的值。根据这些常数,我将用我的方法进行计算。。相反,我希望在enum中进行计算,并希望得到响应。要在enum中进行计算,我必须将两个/三个引用对象传递给enum方法

EX:把学校看作EnUM,常量是教师(低级别访问),学生(NoAccess),Office管理员(Office访问)。p> 在enum中,我有一个抽象方法进程,它接收用户POJO,字符串作为参数,更新对象中的一些字段,并将相同的用户POJO(更新后)返回给调用者。通过这一点,我可以同步枚举本身中的常量及其逻辑

所以我的问题,

  • 在enum中使用此实现可以吗?(我已经看到大多数示例将枚举处理为存储常量值,而不将其用于任何计算)

  • 这种计算可以通过在类中使用方法来完成,如果使用枚举方法进行计算,有什么好处

  • 是否可以在枚举中创建getter/setter方法

  • 提前谢谢

    IMHO:

  • 在enum中使用此实现可以吗
  • 是的,我一直在做

    enum Ops implements Op {
        Nop{
            @Override
            public int filter(int old, int now) {
                // Unchanged.
                return now;
            }
        },
        Diff{
            @Override
            public int filter(int old, int now) {
                return a(now)
                        | (Colour.MidGrey + (r(now) - r(old))) << 16
                        | (Colour.MidGrey + (g(now) - g(old))) << 8
                        | (Colour.MidGrey + (b(now) - b(old)));
            }
        };
    }
    
    枚举操作实现操作{ 不{ @凌驾 公共整数筛选器(旧整数、现在整数){ //不变。 现在就回来; } }, 差异{ @凌驾 公共整数筛选器(旧整数、现在整数){ 返回a(现在) |(color.MidGrey+(r(现在)-r(旧))IMHO:

  • 在enum中使用此实现可以吗
  • 是的,我一直在做

    enum Ops implements Op {
        Nop{
            @Override
            public int filter(int old, int now) {
                // Unchanged.
                return now;
            }
        },
        Diff{
            @Override
            public int filter(int old, int now) {
                return a(now)
                        | (Colour.MidGrey + (r(now) - r(old))) << 16
                        | (Colour.MidGrey + (g(now) - g(old))) << 8
                        | (Colour.MidGrey + (b(now) - b(old)));
            }
        };
    }
    
    枚举操作实现操作{ 不{ @凌驾 公共整数筛选器(旧整数、现在整数){ //不变。 现在就回来; } }, 差异{ @凌驾 公共整数筛选器(旧整数、现在整数){ 返回a(现在) |(color.midblay+(r(现在)-r(旧))) 在enum中使用此实现可以吗

    这是一种设计选择。
    Enum带来一些AdvdantChanges来提供服务操作。
    枚举值是开箱即用的单例,它们是自解释的,有内存效率等。但也有一些限制,您不能直接从枚举派生,因此如果您希望能够测试代码并避免将执行计算的客户端类与枚举耦合,则应在枚举后面引入接口…如果以后您改变对枚举使用的看法。

    这种计算可以通过在类中使用方法来完成,它的作用是什么 如果我使用枚举方法进行计算,会有什么好处

    您可以根据对象进行推理。您不需要在代码中创建服务和间接寻址,因为作为域对象的枚举会进行计算。
    枚举值和相关的处理是同一个问题的一部分。因此,收集它们并不一定是一种难闻的气味。
    不过,请注意如果您开始在枚举方法中编写许多处理,这些处理会执行非常不同的操作,您可能应该将它们从枚举中删除。
    这是一种不好的气味,因为枚举不应该成为上帝对象

    是否可以在枚举中创建getter/setter方法

    提供数据,是,但设置枚举数据:否,您不能。
    否则,您将构建一个有状态的服务,并有可能完成同步问题

    在enum中使用此实现可以吗

    这是一种设计选择。
    Enum带来一些AdvdantChanges来提供服务操作。
    枚举值是开箱即用的单例,它们是自解释的,有内存效率等。但也有一些限制,您不能直接从枚举派生,因此如果您希望能够测试代码并避免将执行计算的客户端类与枚举耦合,则应在枚举后面引入接口…如果以后您改变对枚举使用的看法。

    这种计算可以通过在类中使用方法来完成,它的作用是什么 如果我使用枚举方法进行计算,会有什么好处

    您可以根据对象进行推理。您不需要在代码中创建服务和间接寻址,因为作为域对象的枚举会进行计算。
    枚举值和相关的处理是同一个问题的一部分。因此,收集它们并不一定是一种难闻的气味。
    不过,请注意如果您开始在枚举方法中编写许多处理,这些处理会执行非常不同的操作,您可能应该将它们从枚举中删除。
    这是一种不好的气味,因为枚举不应该成为上帝对象

    是否可以在枚举中创建getter/setter方法

    提供数据,是,但设置枚举数据:否,您不能。

    否则,您将构建一个有状态的服务,并且您将面临完成同步问题的风险。

    枚举被定义为最终枚举。只要相同输入的结果相等,就允许进行计算。 您还可以修改输入实例,但不应在枚举中定义任何setter,因为在这种情况下,枚举不是不可变的


    另请参见

    枚举被定义为最终枚举。只要相同输入的结果相等,就允许进行计算。 您还可以修改输入实例,但不应在枚举中定义任何setter,因为在这种情况下,枚举不是不可变的


    另请参见

    您能否发布一些(伪)代码来说明您所追求的目标?基本上,您可以向枚举添加方法并在那里进行计算,但这给我的印象是一种设计味道(至少不知道更多).@Thomas我同意out关于潜在设计气味的说法。我不会一概而论,但我认为如果您以这种方式过度利用枚举,可能会出现这种情况。这完全是一个错误