【发布时间】:2018-08-21 09:45:19
【问题描述】:
我会尽量保持简短。我正在尝试做这样的事情:
public enum Fruit {
APPLE("Apple", appleHelper::doAppleThing),
ORANGE("Orange", orangeHelper::doOrangeThing);
private String name;
private Function<String, List<T>> fruitFunction;
Fruit(String name, Function<String, List<T>> fruitFunction) {
this.name = name;
this.fruitFunction = fruitFunction;
}
public String getName() {
return name;
}
public <T> List<T> applyFruitFunction(String someString) {
return fruitFunction.apply(someString);
}
}
这样以后,我可以有类似的方法
private <T> List<T> doFruitThing(String someString, Fruit fruit) {
List<T> transformedFruits = fruit.applyFruitFunction(someString);
if (transformedFruits.isEmpty()) {
throw new FruitException("There was no fruit of type " + fruit.getName());
}
return transformedFruits;
}
我在这里遇到了两个问题。
-
doAppleThing和doOrangeThing不是静态方法,理想情况下会保持这种状态,我找不到任何方法来创建appleHelper和orangeHelper的本地实例以使方法引用工作。 - 即使我将方法设为静态,枚举也不能有 Type 参数,因此无法将
Function<String, List<T>> fruitFunction作为字段。
有没有办法做到这一点?或者更好的方法?
【问题讨论】:
-
您希望方法是非静态的,但使用该方法的实例初始化枚举?并且不能从枚举外部设置方法?这正是静态方法的用途。另一方面,如果您希望枚举获取其帮助类的实例并使用该实例方法,那么这正是枚举不适合的。