[英]How Can I Create method In Java With Same Type Parameter?
我的代码如下所示:
enum EnumType {
CATEGORY,
GROUP,
MAIN
}
方法:
public void call(EnumType type){
switch(type):
case CATEGORY:
return methodForCategory();
case GROUP:
return methodForGroup();
...
}
public void methodForCategory(){
... Operations according to EnumType.CATEGORY
}
public void methodForGroup(){
... Operations according to EnumType.GROUP
}
public void methodForMain(){
... Operations according to EnumType.MAIN
}
但是我想在没有开关/情况下调用它,如下所示;
public void call(EnumType type){
methodForType(EnumType type);
}
有可能还是有更好的选择?
您可以在枚举内创建方法实现,如下所示:
public enum EnumType {
CATEGORY {
@Override
public void processMethod() {
// Do something here
}
},
GROUP {
@Override
public void processMethod() {
// Do something here
}
},
MAIN {
@Override
public void processMethod() {
// Do something here
}
};
public abstract void processMethod();
}
并将调用方法实现更新为:
public void call(EnumType type){
type.processMethod();
}
并且切换代码不应返回任何内容,因为方法的返回类型为void
。
您可以将EnumMap
用作方法的注册表,并使用提供的Enum
可以返回Runnable
的正确实现。 我已经将Runnable
用作功能接口,因为它不输入也不产生任何输出。
在具有业务逻辑的另一个类中,可以初始化map
并添加相应的Runnable
实现:
class Strategy{
private final EnumMap<EnumType, Runnable> map;
public Strategy(){
//Initialize values here
map = new EnumMap<>(EnumType.class);
map.put(EnumType.CATEGORY, () -> {
System.out.println("CATEGORY");
});
map.put(EnumType.GROUP, () -> {
System.out.println("GROUP");
});
map.put(EnumType.MAIN, () -> {
System.out.println("MAIN");
});
}
public void call(EnumType type){
map.get(type).run();
}
}
然后,您可以通过提供Enum类型作为参数来调用call()
方法:
public static void main(String args[]){
Strategy str = new Strategy();
str.call(EnumType.CATEGORY);
str.call(EnumType.GROUP);
str.call(EnumType.MAIN);
}
您可以使用Command设计模式的变体,并将对函数的引用存储为枚举类型的字段,并提供通用的execute()
方法来执行自定义操作。
enum EnumType {
CATEGORY( ()-> {} ),
GROUP( ()-> {System.out.println("Hello");} ),
MAIN( EnumType::doSomething );
private final Runnable operation;
private EnumType(Runnable operation) {
this.operation = operation;
}
public void execute() {
operation.run();
}
private static final void doSomething() {
System.out.println("World");
}
}
如果方法很短,则可以使用lambda表达式(对于GROUP
)。 如果它们更长,则可以使用方法引用(与MAIN
)。 如果需要参数或返回值,则可以使用其他功能接口 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.