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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:44:23