【Android-java】低级错误记录 构造函数的问题:我的对象为啥里面的东西都是空的呢??

news/2024/11/28 21:52:51/

问题

在debug的时候发现我的 labItem 对象里面的属性啥的都是空,这是为啥呢?
代码如下:

你现在是android高手。要求详细说明,举例代码,保证正确可运行,并支持当前主流的android版本。 /*** 选择Lab模式所需要的东西*/
public class LabItem {/*** 组件背景*/@DrawableResint background;/*** 跳转的类*/Class<?> jumpingClass;/*** 模式名称*/String title;/*** 模式描述*/String desc;/***  点击事件*/View.OnClickListener listener = new View.OnClickListener() {@Overridepublic void onClick(View view) {}};public LabItem() {}public LabItem(String title, String desc) {new LabItem( title, desc,null);}public LabItem(String title, String desc, View.OnClickListener listener) {this.title = title;this.desc = desc;this.listener = listener;// 默认的bgthis.background = R.drawable.app_ability_item_bg;}public LabItem(int background, int picResource, Class<?> jumpingClass, String title, String desc) {this.background = background;this.jumpingClass = jumpingClass;this.title = title;this.desc = desc;}// 跳转的类public Class<?> getJumpingClass() {return jumpingClass;}
}

我再通过如下的代码调用:

private ArrayList<LabItem> initLabsList() {ArrayList<LabItem> labItems = new ArrayList<>();LabItem labItem = new LabItem(getString(R.string.zego_sr_title), getString(R.string.zego_sr_des));labItems.add(labItem);return labItems;
}private void initLabRecycleView() {rvLabItem = findViewById(R.id.rv_lab_item);ArrayList<LabItem> labItems = initLabsList();LabItemAdapter adapter = new LabItemAdapter(labItems);// 适配LinearLayoutManager layoutManager =  new LinearLayoutManager(this);rvLabItem.setAdapter(adapter);rvLabItem.setLayoutManager(layoutManager);adapter.setListener(holder -> {if (holder instanceof LabItem) {if (shouldJumpToNextActivity) {return;}shouldJumpToNextActivity = true;// TODO: 2023/9/1 待定跳转
//                startActivity(new Intent(KTVClassActivity.this, ((LabItemViewHolder) holder).jumpClass));}});}

为什么 ArrayList labItems = initLabsList(); 里面的数据都是null呢?

解决

LabItem类有多个构造函数,但在LabItem(String title, String desc)构造函数中,没有正确调用其他构造函数来初始化LabItem对象的属性。因此,当你调用initLabsList()方法时,返回的ArrayList中的LabItem对象都是未初始化的,因此它们的属性值都为null。

为了解决这个问题,你可以在LabItem(String title, String desc)构造函数中调用其他构造函数来初始化属性。修改LabItem(String title, String desc)构造函数的代码如下:

public LabItem(String title, String desc) {this(title, desc, null);
}

这样,当你调用initLabsList()方法时,LabItem对象将会正确初始化,并且ArrayList中的LabItem对象将包含正确的属性值。

所以是我傻了~写了那么久的代码,这种低级错误都会犯。


http://www.ppmy.cn/news/1086711.html

相关文章

Ceph基础知识和基础架构认识

1 Ceph基础介绍 Ceph是一个可靠地、自动重均衡、自动恢复的分布式存储系统&#xff0c;根据场景划分可以将Ceph分为三大块&#xff0c;分别是对象存储、块设备存储和文件系统服务。在虚拟化领域里&#xff0c;比较常用到的是Ceph的块设备存储&#xff0c;比如在OpenStack项目…

【ES6】CommonJS模块和ES6模块

在JavaScript中&#xff0c;模块是一种将功能代码组织成逻辑单元的方式&#xff0c;以便在其他项目中重复使用。有两种主要的模块系统&#xff1a;CommonJS和ES6。 1、CommonJS 在CommonJS中&#xff0c;我们使用require来引入模块&#xff0c;使用module.exports来导出模块。…

MyBatis中至关重要的关系映射----全方面介绍

目录 一 对于映射的概念 1.1 三种关系映射 1.2 resultType与resultMap的区别 resultType&#xff1a; resultMap&#xff1a; 二&#xff0c;一对一关联查询 2.1 嵌套结果集编写 2.2 案例演示 三&#xff0c;一对多关联查询 3.1 嵌套结果集编写 3.3 案例演示 四&…

WPF Border设置渐变色

背景色渐变 <Border> <Border.Resources> <Style TargetType"Border"> <Setter Property"Background"> …

【良品】运维实施工程师面试题

1、Linux 查看哪个服务程序占用了 8089 端口用什么命令&#xff1f; 答&#xff1a;netstat –anpt | grep 8089 2、杀死 PID 为 4728 的进程用什么命令&#xff1f; 答&#xff1a;kill -9 4728/ 3、找出当前目录以及子目录下文件名以 en 为首字母的文件用什么命令&#xff…

1780_添加鼠标右键空白打开命令窗功能

全部学习汇总&#xff1a; GitHub - GreyZhang/windows_skills: some skills when using windows system. 经常执行各种脚本&#xff0c;常常需要切换到命令窗口中输入相关的命令。从开始位置打开cmd然后切换目录是个很糟糕的选择&#xff0c;费时费力。其实Windows 7以及Windo…

leetcode88合并两个有序数组

题目&#xff1a; 给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2&#xff0c;另有两个整数 m 和 n &#xff0c;分别表示 nums1 和 nums2 中的元素数目。 请你 合并 nums2 到 nums1 中&#xff0c;使合并后的数组同样按 非递减顺序 排列。 注意&#xff1a;最终&…

Office365 Excel中使用宏将汉字转拼音

Office365 Excel中开启宏 文件 - 选项 - 信任中心 - 信任中心设值 - 宏设值 启用VBA宏启用VBA宏时启用Excel 4.0宏信任对VBA工程对象模型的访问 创建宏 视图 - 查看宏 填写名字创建宏&#xff1a;getpy填入下面代码保存&#xff0c;点击否&#xff0c;另存类型为“excel启…