一.集合賦值問題
一般我們從服務(wù)器請求到集合時一般賦值這樣,然后將數(shù)據(jù)展示到相應(yīng)的控件上。
ArrayList<String> mDataList = new ArrayList<String>();
public void getRespon(ArrayList<String> mServiceDataList) {
mDataList = mServiceDataList;
}
這樣直接操作數(shù)據(jù)源,會導(dǎo)致當(dāng)我們把mDataList集合清空的時候數(shù)據(jù)源mServiceDataList也同時清空,破壞了源數(shù)據(jù),因為兩個指向的是一個地址。因此不應(yīng)該直接操作數(shù)據(jù)源。
ArrayList<String> mDataList = new ArrayList<String>();
public void getRespon(ArrayList<String> mServiceDataList) {
//1.清空下集合
mDataList.clear();
//2.添加集合
if (mServiceDataList != null) {
mDataList.addAll(mServiceDataList);
}
}
為了避免產(chǎn)生莫名其妙的問題,因此盡量不要破壞傳過來的數(shù)據(jù)。
二.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方法可以比較兩個內(nèi)容是否相等
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 子父類相互轉(zhuǎn)換
子類轉(zhuǎn)父類
public void testView() {
TextView mTextView = new TextView(mActivity);
View mTextView1 = mTextView;
mTextView1.setVisibility(View.VISIBLE);
}
TextView可以轉(zhuǎn)成父類。并且調(diào)用setVisibility方法
父類轉(zhuǎn)子類
public void testView() {
View mView = new View(mActivity);
TextView mTextView = (TextView) mView;
}
運行報ClassCastException
但是findViewById好像返回的就是一個View并且可以轉(zhuǎn)換成子類類型
public void testView() {
View viewById = mActivity.findViewById(R.id.viewPager);
ViewPager mViewPager = (ViewPager) viewById;
}
雖然 findViewById 可以強轉(zhuǎn)成 View 的子類,但是本質(zhì)獲取到的還是 XML 中的那個類型 View,XML 中是 ViewPager,findViewById 獲取到也只能是 ViewPager,如果強轉(zhuǎn)成 其他類型 一定會報類型轉(zhuǎn)換異常
父類是可以轉(zhuǎn)成子類的,但是有一個前提條件,那就是它本質(zhì)上就是這個子類的對象
六.基本數(shù)據(jù)類型和對象

基本數(shù)據(jù)類型和對象之間有很大的區(qū)別,基本數(shù)據(jù)類型只能是一個數(shù)值,而對象可以有變量和方法,int 的默認值為0,而 Integer 的默認值為 null,因為它們本身就是兩種不同的東西
六.重寫和重載
重寫:重寫父類的方法
@Override
public void onPause() {
super.onPause();
}
重載:一個類里可以有相同方法名的方法,但是參數(shù)不同。
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() 的,來源于我曾經(jīng)遇到過的問題,在 RecyclerView 中 itemView 中包含一個 ImageView 對象,用于加載后臺的用戶頭像 URL,但是隨著列表的滾動,ImageView 加載的圖片會混亂起來,原因是 Glide 持有 Activity 的上下文,只要 Activity 沒有 finish,Glide 就不會停止本次讀取和加載,如果使用了 ImageView 的上下文,只要 ImageView 不可見就會停止加載
此篇文章來源于玉剛文章《那些年,那些坑》,再加一部分自己遇到的坑。