从ID获取节俭字段类型

时间:2014-07-23 17:12:18

标签: java thrift

有没有办法使用节俭ID获取参数类型?我有数据需要转到6个不同的Thrift对象之一,所以我使用反射来实例化相应的对象并设置数据字段。

Class<?> cls = Class.forName(package + table.name);
Object o = cls.newInstance();
Method getField = cls.getMethod("fieldForId", int.class);
Object field = getField.invoke(o, thriftId);
Method setField = cls.getMethod("setFieldValue", field.getClass(), Object.class);
setField.invoke(o, field, data);

变量data是一个字符串。这段代码很有效,直到它遇到一个字体不是String的字段,我可以得到ClassCastException。我试过这样做:

Method getFieldValue = cls.getMethod("getFieldValue", field.getClass());
System.out.println(getFieldValue.invoke(o, field).getClass.getName());

但对于String,如果getFieldValue为空并且您无法获取该类,则返回null。我可以假设所有空值都是字符串,但考虑到列表,地图等可能也返回为null,这似乎很危险。

我也试过获得该字段的Class,但它只是作为预期的Enum(_Fields)返回。

1 个答案:

答案 0 :(得分:0)

我设法找到了解决方案。抓住该字段的名称然后获取该字段。

Method getFieldName = field.getClass().getMethod("getFieldName");
String fieldName = (String) getFieldName.invoke(field);
Class<?> fieldType = cls.getField(fieldName).getType());