添加 HashMap 而不是使用 switch-case?

Adding HashMap instead of using switch-case?

所以我有一个 Java class,它有许多开关案例,我现在想用 HashMap 替换它们,因为性能更好。所以早些时候我的开关盒是这样的:

SomeClass someMethod =  new SomeClass();

  if (!("".equals(varA))) {
                switch (varA) {
                case "3":
                    someMethod.setValue("abcd");
                    break;
                case "91":
                    someMethod.setValue("defgh");
                    break;
                        }

现在我想用 HashMap 替换它。我正在努力将对象添加到 put 中。

HashMap<String, SomeClass> hashMap= new HashMap();
hashMap.put("3", ?????);

我应该在那里写什么以便我的对象设置值?

您可以将 callbacks 存储为哈希图的值:

public interface MyCallback { 
  public void doSmth( String val ); 
}

...

HashMap<String, MyCallback> hashMap = new HashMap<>();
hashMap.put( "42", new MyCallback(){
  @Override doSmth( String val ){ System.out.println( val ); }
} );

hashMap.get( "42" ).doSmth( "ultimate question" );

在你明显的 switch case 中,你总是用不同的值调用 someMethod.setValue("..."),所以这段代码可以做同样的事情:

private static final Map<String, String> values = new HashMap<String, String>();

// in ctor: Fill values on first class instanciation only
if (values.size() == 0) {
    values.put("3", "abcd");
    values.put("91", "defgh");
}


// later
if (values.containsKey(varA))
    someMethod.setValue(values.get(varA));
else
    // Handle unknown switch case

已更新 java 8:

Map<String, Consumer<String>> map = new HashMap<>();
map.put("42", s -> System.out.println(s));

map.get( "42" ).accept( "ultimate question" );
//or
Optional.ofNullable(map.get("42")).map(fn -> fn.accept("ultimate answer"));