繁体   English   中英

如何在具有相同类型参数的Java中创建方法?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM