You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

循环中变量名拦截方法及自定义对象整数读取函数创建问询

嘿,我来帮你搞定这两个问题~

问题1:循环中拦截变量名

在Java里直接在循环里“抓”变量名其实有点绕——因为编译后变量名可能会被JVM优化掉(比如代码混淆后就没了)。不过像你这种命名有规律的类成员变量(比如data0、data1...),最实用的办法是用反射来遍历匹配字段名,既能拿到变量名,又能操作对应的值。

核心思路是:

  • 获取目标类的所有字段(用Class.getDeclaredFields())
  • 循环遍历每个字段,判断字段名是否符合你的规则(比如以"data"开头,后面跟着数字)
  • 符合规则的话,就能通过Field.getName()拿到变量名,用Field.get(Object)获取对应的值
问题2:读取IODBTLMNG类中的整数内容的函数实现

针对你定义的IODBTLMNG类,我给你两种实现思路,按需选择就行:

方法1:手动遍历(适合字段固定、数量少的情况)

如果字段不会随便加,直接手动读取每个data字段就好,简单又直观:

import java.util.ArrayList;
import java.util.List;

public class DataReader {
    public List<Integer> readIntData(IODBTLMNG wrapper) {
        List<Integer> dataList = new ArrayList<>();
        // 逐个添加data0到data10的值
        dataList.add(wrapper.data0);
        dataList.add(wrapper.data1);
        dataList.add(wrapper.data2);
        dataList.add(wrapper.data3);
        dataList.add(wrapper.data4);
        dataList.add(wrapper.data5);
        dataList.add(wrapper.data6);
        dataList.add(wrapper.data7);
        dataList.add(wrapper.data8);
        dataList.add(wrapper.data9);
        dataList.add(wrapper.data10);
        return dataList;
    }
}

这种方式性能好、可读性强,不用依赖反射,适合字段固定的场景。

方法2:反射实现(适合字段多、可能扩展的情况)

如果以后可能加data11、data12这类字段,用反射就不用每次改代码,更灵活:

import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Pattern;

public class DataReader {
    // 匹配"data+数字"格式的字段名
    private static final Pattern DATA_FIELD_PATTERN = Pattern.compile("^data\\d+$");

    public List<Integer> readIntData(IODBTLMNG wrapper) {
        List<Integer> dataList = new ArrayList<>();
        Class<?> clazz = wrapper.getClass();
        
        // 获取类的所有声明字段
        Field[] fields = clazz.getDeclaredFields();
        for (Field field : fields) {
            // 检查字段名符合规则,且类型是int
            if (DATA_FIELD_PATTERN.matcher(field.getName()).matches() && field.getType() == int.class) {
                try {
                    // 如果字段是private的,这步能让我们访问它;你的字段是public,这步可以省略,但加上更通用
                    field.setAccessible(true);
                    // 获取字段的值并加入列表
                    int value = field.getInt(wrapper);
                    dataList.add(value);
                } catch (IllegalAccessException e) {
                    // 这里可以加日志或者异常处理逻辑
                    e.printStackTrace();
                }
            }
        }
        
        // 额外提醒:反射获取字段的顺序不一定是你定义的顺序,如果需要按data0到data10排序,可以加个排序逻辑
        // 比如先把字段名和值存成Map,再按字段名里的数字排序后提取值
        return dataList;
    }
}

另外提个小细节:你定义类的时候写的public int data0 = new int();其实没必要——int是基本类型,直接public int data0;就行,默认值是0,不用new int()。

内容的提问来源于stack exchange,提问作者Tarma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 06:52:46