我有以下成员。
protected List<FieldHandler> fieldHandlers;
此列表包含具体fieldHandler对象的列表。以下是将值添加到此列表的方式。
fieldHandlers.add(new StringFieldHandler(fieldName));
下面是FieldHandler对象和具体的实现示例。
public interface FieldHandler<T,R> {
R handle(R target, T fieldValue) throws JSONMapperException;
}
public class IntegerFieldHandler extends ValueFieldHandler<Integer,JSONObject> {
public IntegerFieldHandler(String fieldName) {
super(fieldName);
}
@Override
public JSONObject handle(JSONObject target, Integer fieldValue) throws JSONMapperException {
try {
target.put(fieldName, fieldValue);
} catch (JSONException ex) {
throw new JSONMapperException(ex);
//log the exception
}
return target;
}
}
现在我正在尝试从此列表中获取值。最终可能是StringFieldHandlers或IntegerFieldHandlers或BooleanFieldHandlers。
FieldHandler fieldHandlerForCurrentHBaseColumnValue = fieldHandlers.get(i);
我需要检查这是哪个处理程序并调用传入值的相关句柄方法。
我试过这样做,但看起来很难看。
JSONObject targetObject = null;
FieldHandler fieldHandlerForCurrentHBaseColumnValue = fieldHandlers.get(i);
if (fieldHandlerForCurrentHBaseColumnValue instanceof IntegerFieldHandler) {
IntegerFieldHandler integerFieldHandler = (IntegerFieldHandler) fieldHandlerForCurrentHBaseColumnValue;
targetObject = integerFieldHandler.handle(targetObject,(Integer) tuple.get(i));
} else if (fieldHandlerForCurrentHBaseColumnValue instanceof BooleanFieldHandler) {
} else if (fieldHandlerForCurrentHBaseColumnValue instanceof StringFieldHandler) {
}
我该怎么做?任何帮助将不胜感激。