自动将新对象添加到公共静态ArrayList失败问题排查
问题解决方案
错误原因
你定义的bikeIds是ArrayList<Integer>类型,这个集合只能存储Integer(整数)类型的数据,但你在构造方法中调用bikeIds.add(this)时,this指代的是当前Bike类的实例,类型不匹配,因此编译器报错。
两种解决方案
根据你的需求(存储Bike实例以便打印所有成员),有两种对应修复方式:
方案1:存储Bike实例(推荐,符合你的需求)
把集合的泛型从Integer改为Bike,这样就能直接存储Bike对象:
import java.util.ArrayList; public class Bike { private int cadence; private int gear; private int speed; private int id; private static int numberOfBicycles = 0; // 修改泛型为Bike,用于存储Bike实例 public static ArrayList<Bike> bikes = new ArrayList<Bike>(); public Bike(int startCadence, int startSpeed, int startGear){ gear = startGear; cadence = startCadence; speed = startSpeed; id = ++numberOfBicycles; // 添加当前Bike实例到集合 bikes.add(this); } // 新增方法:打印所有Bike的信息 public static void printAllBikes() { for (Bike bike : bikes) { System.out.printf("Bike ID: %d, 踏频: %d, 速度: %d, 档位: %d%n", bike.id, bike.cadence, bike.speed, bike.gear); } } }
方案2:仅存储Bike的ID(如果你的需求是存ID而非实例)
如果原本的意图是存储每个Bike的id(整数类型),只需修改构造方法中的add参数为id即可:
// 构造方法内修改为添加id bikeIds.add(id);
补充说明
Java是强类型语言,ArrayList的泛型<T>会严格限定集合能存储的数据类型,必须保证添加的元素类型和泛型声明一致,否则就会出现类型不匹配的编译错误。
内容的提问来源于stack exchange,提问作者hpoly01
相关产品推荐
相关产品推荐

