問:放
像下面這段代碼,ThreadLocal在初始化的時(shí)候后面接了一個(gè)方法,我在自己的代碼中也試了一下,可以再大括號中定義變量定義方法,但是外部是不能調(diào)用的,我想知道這樣寫除了初始化還有什么用途和意義呢?
private static ThreadLocal<Integer> seqNum = new ThreadLocal<Integer>(){
public Integer initialValue(){
return 0;
}
};
答:1:這個(gè)叫匿名內(nèi)部類
2:通過這種寫法創(chuàng)建了一個(gè)ThreadLocal沒有名字的子類。這個(gè)子類中覆蓋了ThreadLocal的原有的initialValue方法,同時(shí)也創(chuàng)建了這個(gè)子類的一個(gè)實(shí)例。
它的作用跟
class OutterClass {
private static class MyThreadLocal extends ThreadLocal<Integer> {
public Integer initialValue(){
return 0;
}
}
private static MyThreadLocal seqNum = new MyThreadLocal();
}
等價(jià),好處是你不用專門為這個(gè)子類(MyThreadLocal)想一個(gè)名字,代碼量也少一點(diǎn)
3: 匿名內(nèi)部類不能被引用,因?yàn)檫@個(gè)類的名字都沒有,怎么引用呢?!