排除Reflection
是可以理解的,但使用getClass()
不应该是问题。
我处理这个问题的解决方案:
import java.util.concurrent.ConcurrentHashMap;
import java.util.Map;
public class DynamicDispatch{
Map<String,Event> events = new ConcurrentHashMap<String,Event>();
public DynamicDispatch(){
Event event = new FirstEvent();
events.put(event.getName(),event);
event = new SecondEvent();
events.put(event.getName(),event);
}
public Event getEvent(String eventName){
return events.get(eventName);
}
public static void main(String args[]){
DynamicDispatch dispatchObj = new DynamicDispatch();
Event event = dispatchObj.getEvent(args[0]);
System.out.println("dispatchObj:"+event+":"+event.getName());
}
}
interface Event {
public String getName();
}
class FirstEvent implements Event{
public String getName(){
//return this.getClass().getSimpleName();
return "FirstEvent";
}
}
class SecondEvent implements Event{
public String getName(){
//return this.getClass().getSimpleName();
return "SecondEvent";
}
}
输出:
java DynamicDispatch FirstEvent
dispatchObj:FirstEvent@72d86c58:FirstEvent
java DynamicDispatch SecondEvent
dispatchObj:SecondEvent@72d86c58:SecondEvent
我仍然更喜欢使用return this.getClass().getSimpleName();
而不是硬编码该值。
我希望上面的代码应该没问题static analysis tools
。