【发布时间】:2013-07-10 12:08:55
【问题描述】:
当我有 enum 或 String 并且我想根据该参数的值进行调度时,会出现重复模式:
public void myMethod(String parameter) {
if(parameter.equals(something)) {
doSomething();
} else if(parameter.equals(somethingElse)) {
doSomethingElse();
}
}
摆脱冗长的if 或case 语句的惯用方法是什么?我正在考虑类似 python 中的单调度泛型函数之类的东西,但我想基于值而不是类型进行调度。
@fun.register(int)
def _(arg, verbose=False):
if verbose:
print("Strength in numbers, eh?", end=" ")
print(arg)
@fun.register(list)
def _(arg, verbose=False):
if verbose:
print("Enumerate this:")
for i, elem in enumerate(arg):
print(i, elem)
【问题讨论】:
-
请注意,单分派泛型函数与您的 Java 示例完全不同:它们在 type 上分派(而 Java 代码在值上分派),它们采用继承和将接口 (ABC) 实现考虑在内(最简单的类型分派 Java 代码将使用
isinstance)。 -
感谢您指出这一点。