一.集合赋值问题
一般我们从服务器请求到集合时一般赋值这样,然后将数据展示到相应的控件上。
ArrayList<String> mDataList = new ArrayList<String>();
public void getRespon(ArrayList<String> mServiceDataList) {
mDataList = mServiceDataList;
}
这样直接操作数据源,会导致当我们把mDataList集合清空的时候数据源mServiceDataList也同时清空,破坏了源数据,因为两个指向的是一个地址。因此不应该直接操作数据源。
ArrayList<String> mDataList = new ArrayList<String>();
public void getRespon(ArrayList<String> mServiceDataList) {
//1.清空下集合
mDataList.clear();
//2.添加集合
if (mServiceDataList != null) {
mDataList.addAll(mServiceDataList);
}
}
为了避免产生莫名其妙的问题,因此尽量不要破坏传过来的数据。
二.switch 不止可以判断 int
从 Java JDK 1.7 开始,switch 语句就可以开始支持判断 string 对象 和 enum 枚举
public void localEquals(String testString) {
switch (testString) {
case "测试一":
break;
case "测试二":
break;
case "测试三":
break;
}
}
三. equals方法使用防止空指针
string 中 equals方法可以比较两个内容是否相等
public void testEquals(String testString){
"hello".equals(testString);
}
如果testString 写在前面
public void testEquals(String testString){
if(testString!=null){
testString.equals("hello");
}
}
第一个方法不用非空判断,而且testString可以为空值。
四. 被 final 修饰的对象不能被修改
我们常常误以为,被 final 修饰对象不能被修改,其实这种说法不是完全正确的。修改这个对象的成员变量是没有任何问题的
public void testFinal() {
final ReportAllBean mReportAllBean=new ReportAllBean();
mReportAllBean.data="测试修改";
}
但是不能对这个对象进行重新赋值
五.Java 子父类相互转换
子类转父类
public void testView() {
TextView mTextView = new TextView(mActivity);
View mTextView1 = mTextView;
mTextView1.setVisibility(View.VISIBLE);
}
TextView可以转成父类。并且调用setVisibility方法
父类转子类
public void testView() {
View mView = new View(mActivity);
TextView mTextView = (TextView) mView;
}
运行报ClassCastException
但是findViewById好像返回的就是一个View并且可以转换成子类类型
public void testView() {
View viewById = mActivity.findViewById(R.id.viewPager);
ViewPager mViewPager = (ViewPager) viewById;
}
虽然 findViewById 可以强转成 View 的子类,但是本质获取到的还是 XML 中的那个类型 View,XML 中是 ViewPager,findViewById 获取到也只能是 ViewPager,如果强转成 其他类型 一定会报类型转换异常
父类是可以转成子类的,但是有一个前提条件,那就是它本质上就是这个子类的对象
六.基本数据类型和对象
基本数据类型和对象之间有很大的区别,基本数据类型只能是一个数值,而对象可以有变量和方法,int 的默认值为0,而 Integer 的默认值为 null,因为它们本身就是两种不同的东西
六.重写和重载
重写:重写父类的方法
@Override
public void onPause() {
super.onPause();
}
重载:一个类里可以有相同方法名的方法,但是参数不同。
public void testView() {
}
public void testView(int i) {
}
七.ListView 或 RecyclerView 使用 Glide
错误写法
Context context = MainActivity.this;
Glide.with(context)
.load(url)
.into(imageView);
正确写法
Glide.with(imageView.getContext())
.load(url)
.into(imageView);
Glide 使用的上下文建议用 ImageView.getContext() 的,来源于我曾经遇到过的问题,在 RecyclerView 中 itemView 中包含一个 ImageView 对象,用于加载后台的用户头像 URL,但是随着列表的滚动,ImageView 加载的图片会混乱起来,原因是 Glide 持有 Activity 的上下文,只要 Activity 没有 finish,Glide 就不会停止本次读取和加载,如果使用了 ImageView 的上下文,只要 ImageView 不可见就会停止加载
此篇文章来源于玉刚文章《那些年,那些坑》,再加一部分自己遇到的坑。