Java中ArrayList的get()方法为何无法返回Point对象?
问题根源与解决办法
嘿,这个问题我遇过!核心原因是你用了原始类型的ArrayList,没有指定泛型参数,导致get()方法返回的是Object而不是你期望的Point对象,我给你拆解下:
1. 为什么get()不返回Point?
你代码里的方法参数是ArrayList pointsList——这是一个没有泛型约束的原始类型集合。在Java中,原始类型会丢失泛型类型信息,编译器会把这个集合视为存储Object类型的容器。所以当你调用pointsList.get(index)时,返回的是Object实例,而不是Point,直接赋值给Point变量会编译报错,或者需要手动强制类型转换(但这很容易引发运行时异常)。
2. 怎么修复?
第一步:给ArrayList指定泛型类型
修改方法签名,明确指定集合存储的是Point对象:
public static void openAndReadFile(String path, ArrayList<Point> pointsList) { // 你的文件读取逻辑不变 }
这样编译器就会确保只有Point对象能被添加到集合中,调用get()时也会直接返回Point类型,不需要额外转换。
第二步:确认添加的是Point实例
检查你读取文件后的逻辑,确保你创建的是Point对象并添加到集合中,比如:
// 假设读取到x和y坐标 int x = inputFile.nextInt(); int y = inputFile.nextInt(); pointsList.add(new Point(x, y)); // 确保这里添加的是Point实例
如果不小心添加了其他类型的对象,即使泛型正确,后续也会出问题。
3. 额外建议
尽量避免使用原始类型的集合,这是Java 5引入泛型之前的兼容写法。带泛型的集合能在编译期帮你做类型检查,避免很多运行时的类型转换错误,代码也更清晰。
附上你提供的代码片段(补全了部分逻辑):
public class SkylineDC { public static void openAndReadFile(String path, ArrayList pointsList){ //opening of the file Scanner inputFile=null; try{ inputFile=new Scanner(new File(path)); } catch (Exception e1){ try{ inputFile=new Scanner(new File(path+".txt")); } catch (Exception e2){ System.out.println("File not found.."); System.exit(0); } } // 这里应该有读取坐标并添加Point到集合的逻辑 } }
内容的提问来源于stack exchange,提问作者user7355129
相关产品推荐
相关产品推荐

