在java中使用不同名称与单个方法使用不同枚举参数的方法

时间:2016-11-18 20:15:12

标签: java methods

我有一个用例,我需要使用不同的枚举参数调用类似的逻辑。虽然传入枚举参数可以提供良好的代码可重用性,但是有些人可能会认为创建具有表示其操作的名称的多个函数的另一种方式提供了良好的可读性。编程社区是否有选择其中一个的强烈意见?

例如。

enum e {
  aaa,
  bbb
};

foo(e enumParam) {
   // method impl using enumParam
}

Vs. 

fooAaa() {
  // method impl using enum e.AAA
}

fooBbb() {
  // method impl using enum e.BBB
}

3 个答案:

答案 0 :(得分:1)

foo(e enumParam) {
   // method impl using enumParam
}

这是一种更好的方法。枚举可以有大的列表,因此这个单一的方法可以用来容纳额外的枚举属性。另一方面,如果对一个枚举使用一种方法,则必须编写等于枚举大小的方法数。

答案 1 :(得分:1)

如果你必须创建一个调度enum类型的方法,因为你不能将逻辑放在enum的实例方法中,那么第一种方法可以提供更好的代码重用。调用者有一个来自其他地方的e实例。

比较

void doSomething(e enumParam) {
    Foo.foo(enumParam);
}

VS

void doSomething(e enumParam) {
    switch(enumParam) {
        case e.aaa: Foo.fooAaa(); break;
        case e.bbb: Foo.fooBbb(); break;
        default: ... // Throw some exception
    }
}

在第一种情况下,来电者只需将enumParam转发给foo。但是,在第二种情况下,呼叫者需要自己发送e,重复使用类似的逻辑将呼叫路由到fooAaafooBbb

答案 2 :(得分:0)

在OOP世界中,方法实际上代表了一个类的行为或特征。所以,如果它真的取决于fooAAA和fooBBB是不同的行为还是一个。如果有的话,我会使用foo并在其中决定备用路径(甚至可以是私有方法)用于AAA和BBB。