Java报错:void无法转换为ArrayList<Integer>,求解决方法
问题:调用返回ArrayList的方法时提示"void无法转换为ArrayList"错误
我是编程新手,编写了一个生成随机整数ArrayList的ArrayGenerator类,其中GenerateArray方法声明返回ArrayList<Integer>。但在主函数中调用该方法并赋值给ArrayList对象时,出现错误:
Test.java:36: error: incompatible types: void cannot be converted to ArrayList
我尝试用ArrayList构造方法赋值也无效,请问该如何解决?
数组生成器类
import java.util.ArrayList; import java.util.Random; class ArrayGenerator{ //Create varibles and ArrayList and Random int highestnum; ArrayList <Integer> randomnumberArray = new ArrayList<>(); Random random = new Random(); //Constructor public ArrayGenerator(int highestnum){ this.highestnum = highestnum; } //GenerateArray function public ArrayList<Integer> GenerateArray(int highestnum){ //Loop to generate 20 random numbers for (int i = 0; i < 21; i++) { int randomInt = random.nextInt(highestnum); randomnumberArray.add(randomInt); } return randomnumberArray; } }
主函数部分
ArrayList <Integer> List = new ArrayList<>(); ArrayGenerator randomnumbers = new ArrayGenerator(highestnum); //Create array of random numbers and assign it to List List=randomnumbers.GenerateArray(highestnum);
我尝试了以下写法,但也无效:
ArrayList <Integer> List = new ArrayList<>(randomnumbers.GenerateArray(highestnum));
解决方案
1. 排查方法返回值声明的错误
你贴出的代码里GenerateArray方法声明是正确的,但报错明确提示返回void,说明你实际运行的代码中,这个方法的返回值可能被误写成了public void GenerateArray(...)——这是导致该错误的最直接原因。请检查你的实际代码,确保方法返回值是ArrayList<Integer>。
2. 修复成员变量复用的潜在问题
你的ArrayGenerator类中,randomnumberArray是类的成员变量,每次调用GenerateArray都会往同一个列表里追加元素,而不是生成全新的列表。这会导致多次调用后列表长度不断增加,不符合“生成新数组”的预期。
修改后的ArrayGenerator类(遵循Java命名规范,优化逻辑):
import java.util.ArrayList; import java.util.Random; class ArrayGenerator{ // 把Random作为成员变量,避免每次创建新实例 private final Random random = new Random(); // 构造方法可省略,因为GenerateArray会接收highestnum参数 public ArrayGenerator() {} // 方法名改为小驼峰,符合Java规范 public ArrayList<Integer> generateArray(int highestnum){ // 每次调用都创建新的ArrayList,避免复用旧列表 ArrayList<Integer> randomNumberArray = new ArrayList<>(); // 生成20个元素,循环条件改为i < 20(原代码i<21会生成21个) for (int i = 0; i < 20; i++) { int randomInt = random.nextInt(highestnum); randomNumberArray.add(randomInt); } return randomNumberArray; } }
3. 主函数的正确调用方式
修改后,主函数可以正常赋值:
// 方式1:直接实例化并调用 ArrayList<Integer> list = new ArrayGenerator().generateArray(100); // 方式2:先创建对象再调用 ArrayGenerator generator = new ArrayGenerator(); ArrayList<Integer> list = generator.generateArray(100);
额外提示
Java命名规范建议:
- 方法名、变量名使用小驼峰命名(如
generateArray、list) - 类名使用大驼峰命名(如
ArrayGenerator) - 成员变量若无需修改,可添加
final关键字
内容的提问来源于stack exchange,提问作者Rayan Khan
相关产品推荐
相关产品推荐

