Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从ID获取节俭字段类型_Java_Thrift - Fatal编程技术网

Java 从ID获取节俭字段类型

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

有没有办法使用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);
但是对于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());