Android中如何打印ArrayList<Movie>的具体内容?
解决List打印显示对象地址的问题
你看到的com.myapp.Movie@709779f是Object类默认toString()方法的输出,格式为类名@十六进制哈希码。要打印列表里的具体内容,核心是让Movie类返回包含字段信息的字符串,有以下几种方案:
1. 重写Movie类的toString()方法
这是最通用的方案,修改Movie类,添加自定义的toString()实现,把你需要展示的字段都包含进去:
public class Movie { // 假设你的Movie类有这些字段 private int id; private String title; private int releaseYear; // 构造方法、getter/setter省略 @Override public String toString() { return "Movie{" + "id=" + id + ", title='" + title + '\'' + ", releaseYear=" + releaseYear + '}'; } }
修改后,你原来的两种打印方式都会输出具体内容:
- 循环打印时,
result.toString()会返回你定义的字段拼接字符串 Arrays.toString(filteredList.toArray())会遍历每个Movie对象,调用其toString()方法,最终输出类似[Movie{id=1, title='Test Movie', releaseYear=2024}, ...]的结果
2. 使用Java 16+的Record类(适合不可变数据类)
如果你的Movie类只是用来存储数据,没有复杂的业务逻辑,可以用Record类替代普通类,它会自动生成包含所有字段的toString()、equals()和hashCode()方法:
public record Movie(int id, String title, int releaseYear) {}
这样无需手动重写toString(),直接打印列表就能看到所有字段内容。
3. 临时手动拼接字段(无需修改Movie类)
如果不想修改Movie类,只是临时打印调试,可以在循环里直接拼接字段值:
for (Movie result : filteredList) { Log.e("Agil_Limits - ", "Movie: id=" + result.getId() + ", title=" + result.getTitle() + ", releaseYear=" + result.getReleaseYear()); }
这种方式适合快速调试,但复用性差,每次打印都要手动写字段拼接逻辑。
内容的提问来源于stack exchange,提问作者Darksymphony
相关产品推荐
相关产品推荐

