我很难比较这两个。所以我向比我更具体知识的人求助。 我必须将一个功能对象链接到一个名称(当然是字符串),函数调用类似于:
serviceInstance.useThis(String name, Object parameter);
目前我正在考虑这个API的“后端”有三个选项:
- 枚举 + EnumMap
- 纯枚举
- HashMap
1和2基本相同,但1是为了在其他用途中重用枚举而存在。 我的主要关注点归结为Enum.valueOf(String name)与String.hashCode()相比速度如何?
以下是我正在尝试的两种实现:
public class HashMapHandlerType{
static HashMap<String, MyInterfaceProvider> handlers = ~ ;
public void useThis(String name, Object parameter) throws IllegalArgumentException {
MyInterfaceProvider prov = handlers.get(name);
if(prov != null){
prov.get().use(parameter);
}else{
throw new IllegalArgumentException(name);
}
}
}
public class EnumTypeHandler{
public void useThis(String name, Object parameter) throws IllegalArgumentException {
HandlersEnum.valueOf(name).get().use(parameter);
}
}
使用枚举的优点是,在使用EnumMap时不必担心冲突的问题。 但是,相对于String.hashCode()并处理哈希函数中可能出现的冲突,Enum的valueOf是否足够快?
Enum.valueOf
将委托到后端的HashMap
。 - Louis Wasserman