Java 从ID获取节俭字段类型
有没有办法使用thrift ID获取参数的类型?我得到的数据需要转到6个不同的Thrift对象中的一个,所以我使用反射来实例化适当的对象并设置数据字段Java 从ID获取节俭字段类型,java,thrift,Java,Thrift,有没有办法使用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.invo
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);
但是对于String,如果getFieldValue为空并且您无法获取该类,则返回null。我可以假设所有空值都是字符串,但考虑到列表、映射等也可能返回为空,这似乎很危险
我还尝试获取字段的类,但它只是作为预期的枚举(_字段)返回。我设法找到了解决方案。获取字段的名称,然后获取该字段
Method getFieldName = field.getClass().getMethod("getFieldName");
String fieldName = (String) getFieldName.invoke(field);
Class<?> fieldType = cls.getField(fieldName).getType());
Method getFieldName=field.getClass().getMethod(“getFieldName”);
String fieldName=(String)getFieldName.invoke(field);
类fieldType=cls.getField(fieldName.getType());
由于给定字段的类型应该是固定的,您可以自己设置一个简单的基于字段ID的映射表吗?最终我将拥有多达150个对象类型,每个对象类型包含30多个字段。我不想写所有这些映射。获取对象的类型很好,但发现对象中每个字段的类型给我带来了麻烦。如何为这些对象填写数据?例如,我有一个数组(从带分隔符的文件读入),数组索引对应于节俭字段1。因此,我获取ID 1的字段,并将其设置为字段[0]中包含的内容。反射只起作用,因为在运行时之前我不知道我需要哪个节俭对象。
Method getFieldName = field.getClass().getMethod("getFieldName");
String fieldName = (String) getFieldName.invoke(field);
Class<?> fieldType = cls.getField(fieldName).getType());