java - 如何使用 Fields 设置值动态调用 setter 方法?
问题描述
在我的代码中,我有一些类需要传递(使用 UDP 发送)到某个服务器,他收到的元素结构包含 Unsigned32 类型值。
我使用 javolution 来定义元素 struct =>
import javolution.io.Struct;
public class ElementData
{
public Struct.Unsigned32 data1;
public Struct.Unsigned32 data2;
public Struct.Unsigned32 data3;
public Struct.Unsigned32 data4;
public Struct.Unsigned32 data5;
public Struct.Unsigned32 data6;
public Struct.Unsigned32 data7;
public Struct.Unsigned32 data8;
}
我编写了从 CVS 文件中读取元素结构值数据的代码 - 并将元素结构发送到服务器。我想使用'Field'反射设置元素的值 - 但我不能这样做,因为我不能直接设置值 - 所以我必须调用 unsigned32 的'set'方法来做
例子:
public static void main(String[] args) throws NoSuchFieldException {
ElementData element = new ElementData();
Field[] allFields = ElementData.class.getDeclaredFields();
Unsigned32 tmp = new Unsigned32();
tmp.set(12);
Field f1 = ElementData.class.getDeclaredField(allFields[0].getName());
f1.setInt(element, 12); // error because 12 is Int and not Unsigned32
f1.set(element, 12); // error also
f1.set(element, tmp); // error also
}
我正在寻找任何可能的方式来使用字段调用设置器
解决方案
public static void main(String[] args) throws NoSuchFieldException, IllegalArgumentException, IllegalAccessException { //add these throws
ElementData element = new ElementData();
Field[] allFields = ElementData.class.getFields(); //Change to getFields
Field f1 = ElementData.class.getField(allFields[0].getName()); //Change to getField
Unsigned32 tmp = new Unsigned32();
tmp.set(12);
f1.set(element, tmp); //let just f1.set
}
让我们知道它是否有效。
推荐阅读
- python - 使用 google colab pro termianl 自动运行 notebook
- java - Spring 处理 bean 与库的冲突
- reactjs - React 问题路由:无需第二次重新渲染
- python - 调用类内部的方法将对象保存在字典中
- node.js - nodemailer 错误,获取:无效登录:451 4.7.0 临时服务器错误。请稍后再试。(研究过,stackoverflow上的资源有限)
- remote-desktop - Microsoft 的远程桌面连接 (mstsc.exe) 在哪里缓存 OCSP 响应?
- php - 如何在 WordPress Shortcode 中为 UTF-8 Url 编码转换重音字母
- python - 在 jupyer notebook 中改变 pandas df 的外观
- r - R中的foreach循环为我的数组输出返回NA值
- c++ - 自定义对象的Qt排队连接导致运行时错误