程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> instance-JAVA 匿名類的一個問題,求詳解

instance-JAVA 匿名類的一個問題,求詳解

編輯:編程綜合問答
JAVA 匿名類的一個問題,求詳解

請先看代碼:
static List intArrayAsList(final int[] a) {
return new AbstractList() {
public Object get(int i) {

return new Integer(a[i]);
}
public int size() {

return a.length;
}
public Object set(int i, Object o) {
int oldVal = a[i];
a[i] = ((Integer)o).intValue();
return new Integer(oldVal);
}
};

}

public static void main(String[] args) {
int[] a = {0, 1};
List l = intArrayAsList(a);
int b = (int)l.get(0);

}

我的問題在於:當intArrayAsList方法結束時,方法入參不是生命周期就結束了嗎?而且在new AbstractList時,也並沒有把方法入參傳給AbstractList的instance裡去。那麼當調用l.get()時,到底是從哪裡得到的數據?

求詳解這部分知識。

最佳回答:


匿名內部類在編譯時會生成一個普通的類,這樣就可以保證該類在方法結束後依然可以使用,傳入的final參數會成為該類的某個字段的拷貝,比如你這裡傳入的是int類型的數組,那麼在編譯後生成的類中也會有一個類似
final int[]b 的成員,該成員的值就是你傳入的a的值。這樣保證了當你調用匿名內部類的方法時,能夠獲取到外部傳入的參數值。

qingxin_pku
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved