日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java this$0_java中this$0的含义及用法

發布時間:2025/3/20 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java this$0_java中this$0的含义及用法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

java中this$0的含義及用法

(2012-01-19 22:43:33)

標簽:

雜談

java中this$0的含義及用法,具體case是這樣的:

通過測試工具去探測界面UI上的控件FlatButton實例對象,但是拿到的最終對象是FlatButton的內部類TextButton對象,

所以這里需要從一個內部類的實例拿到所在外部類的實例,this$0這時就派上用處了。

示例方案如下:

//通過工具獲取到TextButton實例對象

textButton=getButtonByToolMethod ();

//獲取內部類TextButton的一個字段this$0信息

//this$0特指該內部類所在的外部類的引用,不需要手動定義,編譯時自動加上

Filed

outerField=textButton.getClass().getDeclaredField("this$0");

//this$0是私有的,提升訪問權限

outerField.setAccessible(true);

//拿到該字段上的實例值

FlatButton flatButton=(FlatButton)outerField.get(textButton);

this$0就是內部類所自動保留的一個指向所在外部類的引用。

另外,受到$后的數字0啟發,發現原來數字還可以有1,2,3..., 具體可以看如下代碼就一清二楚了.

//Outer.java

public class Outer {//this$0

public class FirstInner {//this$1

public class SecondInner {//this$2

public class ThirdInner {

}

}

}

public static void main(String[] args) throws Exception{

//初始化各內外實例

Outer test = new Outer();

FirstInner first = test.new FirstInner();

FirstInner.SecondInner second = first.new SecondInner();

FirstInner.SecondInner.ThirdInner third=second.new

ThirdInner();

//Outer,this$0

Field outerfield =

first.getClass().getDeclaredField("this$0");

outerfield.setAccessible(true);

Object object = outerfield.get(first);

System.out.println(object instanceof Outer);

//FirstInner,this$1

Field firstInnerfied =

second.getClass().getDeclaredField("this$1");

firstInnerfied.setAccessible(true);

object = firstInnerfied.get(second);

System.out.println(object instanceof FirstInner);

//SecondInner,this$2

Field secondInnerfield =

third.getClass().getDeclaredField("this$2");

secondInnerfield.setAccessible(true);

object = secondInnerfield.get(third);

System.out.println(object instanceof FirstInner.SecondInner);

}

}

其實用 Java 反編譯工具生成內部類可以更加清楚

public class Outer$FirstInner{//FirstInner內部類有一個帶外部類參數的構造子

public Outer$FirstInner(Outer paramOuter) {}

....

}

public class Outer$FirstInner$SecondInner{

public Outer$FirstInner$SecondInner(Outer.FirstInner

paramFirstInner){}

....

}

public class Outer$FirstInner$SecondInner$ThirdInner{

public

Outer$FirstInner$SecondInner$ThirdInner(Outer.FirstInner.SecondInner

paramSecondInner){}

}

可見每個內部類都有一個指向所在最近的外部類的一個引用,只不過該引用不需要手動添加,編譯器會負責。

分享:

喜歡

0

贈金筆

加載中,請稍候......

評論加載中,請稍候...

發評論

登錄名: 密碼: 找回密碼 注冊記住登錄狀態

昵???稱:

評論并轉載此博文

發評論

以上網友發言只代表其個人觀點,不代表新浪網的觀點或立場。

總結

以上是生活随笔為你收集整理的java this$0_java中this$0的含义及用法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。