检查从列表中检索的对象的泛型类型

时间:2016-11-16 04:38:37

标签: java generics

我有以下成员。

 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) {

}

我该怎么做?任何帮助将不胜感激。

0 个答案:

没有答案