I have 2 files: ImplementationProvider and CaseHandler.
ImplementationProvider:
class ImplementationProvider {
public void method1(Object[] params) {}
public void method2(Object[] params) {}
...
public void method100(Object[] params) {}
}
CaseHandler:
class CaseHandler {
ImplementationProvider ip; // auto injected
public void handle(String s, String param) {
switch(s) {
case USE_CASE_ONE: ip.method1(param); break;
case USE_CASE_TWO: ip.method2(param); break;
...
}
}
}
How can I refactor the CaseHandler so that the USE_CASE strings are keys in a HashMap where the values would be the methods? The main issue I'm having is the propagation of the parameters. Other answers here recommend using an interface, however I need to provide the parameter on runtime.
If you are using Java 8, you can lever the Consumer
functional interface to parametrize your map's values with.
Example:
private static Map<String, Consumer<String>> MAP = new HashMap<>();
static {
MAP.put("USE_CASE_ONE", (s) -> {/*TODO something with param s*/});
// etc.
}
... then somewhere else:
public void handle(String key, String param) {
// TODO check key exists
MAP.get(key).accept(param);
}
What happens here is that for each given key set entry, you map it with a function that consumes a String
(your param
).
Then, you invoke the Consumer
's accept
on your given param in one line.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With