Java多类型对象List中int属性自增的实现方法咨询
解决List中对象int属性自增的问题
你的问题出在对List.set()方法的理解上:你的List存储的是自定义对象实例,而不是int值,list.set(i, intvalue + 1)是试图把List里的对象替换成一个Integer,这既不符合类型要求,也没有修改原对象的内部属性。
正确实现方式(推荐:面向接口统一处理)
因为List里的对象都有String、int、double三种属性,最好先定义一个公共接口,统一int属性的访问方法:
// 定义公共接口,规范int属性的读写 public interface IntPropertyHolder { int getIntAttr(); void setIntAttr(int value); }
让List中的所有对象都实现这个接口(以两个示例类为例):
public class DemoObj1 implements IntPropertyHolder { private String str; private int num; private double dbl; @Override public int getIntAttr() { return num; } @Override public void setIntAttr(int value) { this.num = value; } // 其他属性的构造器、getter/setter省略 } public class DemoObj2 implements IntPropertyHolder { private String name; private int count; private double price; @Override public int getIntAttr() { return count; } @Override public void setIntAttr(int value) { this.count = value; } // 其他属性的构造器、getter/setter省略 }
接下来就可以遍历或指定位置修改对象的int属性了:
List<IntPropertyHolder> objList = new ArrayList<>(); // 向List中添加DemoObj1、DemoObj2实例 // 修改第i个元素的int属性(i为合法索引) if (i >= 0 && i < objList.size()) { IntPropertyHolder targetObj = objList.get(i); // 先获取当前值,自增1后重新设置 targetObj.setIntAttr(targetObj.getIntAttr() + 1); }
特殊场景:无法修改类定义时(反射方案)
如果List中的对象是第三方类,无法修改其代码实现接口,可以用反射来修改int属性(不推荐,性能差且不安全,仅作应急方案):
List<Object> objList = new ArrayList<>(); // 向List中添加目标对象 if (i >= 0 && i < objList.size()) { Object targetObj = objList.get(i); try { // 替换为你实际的int属性名,比如"num"、"count" Field intField = targetObj.getClass().getDeclaredField("num"); intField.setAccessible(true); // 允许访问私有属性 int currentVal = intField.getInt(targetObj); intField.setInt(targetObj, currentVal + 1); } catch (NoSuchFieldException | IllegalAccessException e) { // 处理属性不存在或访问异常 e.printStackTrace(); } }
内容的提问来源于stack exchange,提问作者Theo Gränni
相关产品推荐
相关产品推荐

