老熟女激烈的高潮_日韩一级黄色录像_亚洲1区2区3区视频_精品少妇一区二区三区在线播放_国产欧美日产久久_午夜福利精品导航凹凸

重慶分公司,新征程啟航

為企業提供網站建設、域名注冊、服務器等服務

如何正確的使用JavaPoet-創新互聯

如何正確的使用JavaPoet?相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。

目前創新互聯公司已為上1000家的企業提供了網站建設、域名、網頁空間、網站運營、企業網站設計、曲水網站維護等服務,公司將堅持客戶導向、應用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協力一起成長,共同發展。

JavaPoet的基本介紹

(1)JavaPoet是一款可以自動生成Java文件的第三方依賴

(2)簡潔易懂的API,上手快

(3)讓繁雜、重復的Java文件,自動化生成,提高工作效率,簡化流程

JavaPoet的小試牛刀

為了展示JavaPoet的能力,這里以自動生成一個全新的MainActivity為例。

public class MainActivity extends Activity{

  @Override
  protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
  }
}

我在使用JavaPoet的時候,習慣從外向內逐一生成,但是這不是標準,這里可以按照自己的方式來理解和生成.

public static void main(String[] args) {
    ClassName activity = ClassName.get("android.app", "Activity");

    TypeSpec.Builder mainActivityBuilder = TypeSpec.classBuilder("MainActivity")
        .addModifiers(Modifier.PUBLIC)
        .superclass(activity);

    ClassName override = ClassName.get("java.lang", "Override");

    ClassName bundle = ClassName.get("android.os", "Bundle");

    ClassName nullable = ClassName.get("android.support.annotation", "Nullable");

    ParameterSpec savedInstanceState = ParameterSpec.builder(bundle, "savedInstanceState")
        .addAnnotation(nullable)
        .build();

    MethodSpec onCreate = MethodSpec.methodBuilder("onCreate")
        .addAnnotation(override)
        .addModifiers(Modifier.PROTECTED)
        .addParameter(savedInstanceState)
        .addStatement("super.onCreate(savedInstanceState)")
        .addStatement("setContentView(R.layout.activity_main)")
        .build();

    TypeSpec mainActivity = mainActivityBuilder.addMethod(onCreate)
        .build();

    JavaFile file = JavaFile.builder("com.test", mainActivity).build();

    try {
      file.writeTo(System.out);
    } catch (IOException e) {
      e.printStackTrace();
    }
  }

通過在Main方法中運行以上的代碼,就可以直接生成出MainActivity對象,自上而下的觀察上述代碼,你會發現JavaPoet讓java文件變得有邏輯性。

JavaPoet的常用類

  •  TypeSpec————用于生成類、接口、枚舉對象的類

  • MethodSpec————用于生成方法對象的類

  • ParameterSpec————用于生成參數對象的類

  • AnnotationSpec————用于生成注解對象的類

  • FieldSpec————用于配置生成成員變量的類

  • ClassName————通過包名和類名生成的對象,在JavaPoet中相當于為其指定Class

  • ParameterizedTypeName————通過MainClass和IncludeClass生成包含泛型的Class

  • JavaFile————控制生成的Java文件的輸出的類

 JavaPoet的常用方法

設置修飾關鍵字

addModifiers(Modifier... modifiers)

Modifier是一個枚舉對象,枚舉值為修飾關鍵字Public、Protected、Private、Static、Final等等。

所有在JavaPoet創建的對象都必須設置修飾符(包括方法、類、接口、枚舉、參數、變量)。

設置注解對象

addAnnotation(AnnotationSpec annotationSpec)
addAnnotation(ClassName annotation)
addAnnotation(Class annotation)

該方法即為類或方法或參數設置注解,參數即可以是AnnotationSpec,也可以是ClassName,還可以直接傳遞Class對象。

一般情況下,包含復雜屬性的注解一般用AnnotationSpec,如果單純添加基本注解,無其他附加屬性可以直接使用ClassName或者Class即可。

設置注釋

addJavadoc(CodeBlock block)
addJavadoc(String format, Object... args)

在編寫類、方法、成員變量時,可以通過addJavadoc來設置注釋,可以直接傳入String對象,或者傳入CodeBlock(代碼塊)。

JavaPoet生成類、接口、枚舉對象

在JavaPoet中生成類、接口、枚舉,必須得通過TypeSpec生成,而classBuilder、interfaceBuilder、enumBuilder便是創建其關鍵的方法:

創建類:
TypeSpec.classBuilder("類名“) 
TypeSpec.classBuilder(ClassName className)

創建接口:
TypeSpec.interfaceBuilder("接口名稱")
TypeSpec.interfaceBuilder(ClassName className)

創建枚舉:
TypeSpec.enumBuilder("枚舉名稱")
TypeSpec.enumBuilder(ClassName className)

繼承、實現接口

繼承類:
.superclass(ClassName className)

實現接口
.addSuperinterface(ClassName className)

繼承存在泛型的父類

當繼承父類存在泛型時,需要使用ParameterizedTypeName

ParameterizedTypeName get(ClassName rawType, TypeName... typeArguments)

返回的ParameterizedTypeName對象,已經被添加泛型信息

方法

addMethod(MethodSpec methodSpec)

通過配置MethodSpec對象,使用addMethod方法將其添加進TypeSpec中。

枚舉

addEnumConstan(String enumValue)

通過addEnumConstan方法添加枚舉值,參數為枚舉值名稱。

JavaPoet生成成員變量

JavaPoet生成成員變量是通過FieldSpec的build方法生成.

builder(TypeName type, String name, Modifier... modifiers)

只要傳入TypeName(Class)、name(名稱)、Modifier(修飾符),就可以生成一個基本的成員變量。

成員變量一般來說由注解(Annotation)、修飾符(Modifier)、Javadoc(注釋)、initializer(實例化)。

注解

addAnnotation(TypeName name)

修飾符

addModifiers(Modifier ...modifier)

注釋

addJavadoc(String format, Object... args)

由于上述三個方法,都在通用方法介紹過這里就不再重復介紹。

實例化

initializer(String format, Object... args)

即成員變量的實例化,例:

public Activity mActivity = new Activity;

initializer方法中的內容就是“=”后面的內容 ,下面看下具體的代碼實現,上面的成員變量:

ClassName activity = ClassName.get("android.app", "Activity");
 FieldSpec spec = FieldSpec.builder(activity, "mActivity")
        .addModifiers(Modifier.PUBLIC)
        .initializer("new $T", activity)
        .build();

JavaPoet生成方法

JavaPoet生成方法分為兩種,第一種是構造方法,另一種為常規的方法。

構造方法

MethodSpec.constructorBuilder()

常規方法

MethodSpec.methodBuilder(String name)

方法的主要構成有方法參數、注解、返回值、方法體、拋出異常五種,注解可以參考通用方法addAnnotation,其他方法我們將會一一介紹:

方法參數

addParameter(ParameterSpec parameterSpec)

設置方法參數的方法通過addParameterSpec來實現,ParameterSpec的具體使用參考下一小節。

返回值

returns(TypeName returnType)

設置方法的返回值,只需傳入一個TypeName對象,而TypeName是ClassName,ParameterizedTypeName的基類。

方法體

在JavaPoet中,設置方法體內容有兩個方法,分別是addCode和addStatement:

addCode()
addStatement()

這兩個本質上都是設置方法體內容,但是不同的是使用addStatement()方法時,你只需要專注于該段代碼的內容,至于結尾的分號和換行它都會幫你做好。

而addCode()添加的方法體內容就是一段無格式的代碼片,需要開發者自己添加其格式。

方法體模板

在JavaPoet中,設置方法體使用模板是比較常見的,因為addCode和addStatement方法都存在這樣的一個重載:

addCode(String format, Object... args)

addStatement(String format, Object... args)

在JavaPoet中,format中存在三種特定的占位符:

$T

$T 在JavaPoet代指的是TypeName,該模板主要將Class抽象出來,用傳入的TypeName指向的Class來代替。

ClassName bundle = ClassName.get("android.os", "Bundle");
addStatement("$T bundle = new $T()",bundle)

上述添加的代碼內容為:

Bundle bundle = new Bundle();

$N

$N在JavaPoet中代指的是一個名稱,例如調用的方法名稱,變量名稱,這一類存在意思的名稱

addStatement("data.$N()",toString)

上述代碼添加的內容:

data.toString();

$S

$S在JavaPoet中就和String.format中%s一樣,字符串的模板,將指定的字符串替換到$S的地方

.addStatement("super.$S(savedInstanceState)","onCreate")

即將"onCreate"字符串代替到$S的位置上.

拋出異常

.addException(TypeName name)

設置方法拋出異常,可以使用addException方法,傳入指定的異常的ClassName,即可為該方法設置其拋出該異常.

JavaPoet生成方法參數

JavaPoet生成有參方法時,需要填充參數,而生成參數則需要通過ParameterSpec這個類。

addParameter(ParameterSpec parameterSpec)

初始化ParameterSpec

ParameterSpec.builder(TypeName type, String name, Modifier... modifiers)

給參數設置其Class,以及參數名稱,和修飾符.

通常來說參數的構成包括:參數的類型(Class)、參數的名稱(name)、修飾符(modifiers)、注解(Annotation)

除了builder方法初始化類型、以及名稱、修飾符之外,其余可以通過如下方法進行設置:

添加修飾符

.addModifiers(Modifier modifier)

添加注解

addAnnotation(TypeName name)

添加修飾符、注解具體使用可參考通用方法。

JavaPoet生成注解

在JavaPoet創建類、成員變量、方法參數、方法,都會用到注解。

如果使用不包含屬性的注解可以直接通過

  .addAnnotation(TypeName name)

直接傳入TypeName或者Class進行設置。

如果使用的注解包含屬性,并且不止一個時,這時候就需要生成AnnotationSpec來解決,下面簡單了解下AnnotationSpec。

初始化AnnotationSpec

AnnotationSpec.builder(ClassName type)

可以發現初始化,只需傳入ClassName或者Class即可。

設置屬性

addMember(String name, String format, Object... args)

使用addMember可以設置注解的屬性值,name對應的就是屬性名稱,format的內容即屬性體,同樣方法體的格式化在這里也是適用的。

JavaPoet如何生成代碼

如果上述內容你已經看完,那么恭喜你,你已經明白JavaPoet的意圖,但是現在的你,還差最后一步,即如何生成代碼。

JavaPoet中負責生成的類是JavaFile

JavaFile.builder(String packageName, TypeSpec typeSpec)

JavaFile通過向build方法傳入PackageName(Java文件的包名)、TypeSpec(生成的內容)生成。

打印結果

javaFile.writeTo(System.out)

生成的內容會輸出到控制臺中

生成文件

javaFile.writeTo(File file)

生成的內容會以java文件的方式,存放到你傳入File文件的位置

結束語

當你讀完了本文,如果你產生下面的想法:

  • JavaPoet原來還可以這樣

  •  JavaPoet編寫過程為什么那么流暢,原來Java文件也可以用編程的方式生成

  • JavaPoet可不可以改進我的編碼流程,提升效率

那么說明你已經對JavaPoet感興趣了,可以自己動手嘗試一下,感受下JavaPoet的魅力。

最后貼一張,JavaPoet秘籍,有了它會很好的幫助你使用JavaPoet.

如何正確的使用JavaPoet

看完上述內容,你們掌握如何正確的使用JavaPoet的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注創新互聯行業資訊頻道,感謝各位的閱讀!


分享名稱:如何正確的使用JavaPoet-創新互聯
本文網址:http://www.xueling.net.cn/article/csoigs.html

其他資訊

在線咨詢
服務熱線
服務熱線:028-86922220
TOP
主站蜘蛛池模板: 青青草视频在线看 | 久久9精品区-无套内射无码 | 亚洲av毛片成人精品 | 国产成人午夜高潮毛片 | 爱情岛论坛自拍亚洲品质极速福利 | 乱码午夜-极国产极内射 | 一区二区三区成人久久爱 | 日韩操穴| 人人爽人人澡人人人妻 | 伊人精品| 国产裸体美女永久免费无遮挡 | 亚洲乱码av中文一二区软件 | 成人一区二区三区在线观看 | 欧美成人一区亚洲一区 | 国产一级做a爱片在线看免费 | 一本大道中文日本香蕉 | 日韩少妇激情一区二区 | 亚洲成人中文字幕在线 | 欧洲-级毛片内射八十老太婆 | 久久撸视频 | 国产一区二区高清不卡 | 成人AAA片一区国产精品 | 欧美一区二区三区中文字幕 | 国产成人羞羞视频在线 | 日韩精品aaa| 成人性生交免费看国产 | 大伊香蕉精品视频在线 | 亚洲乱亚洲乱妇 | 一区二区三区免费在线播放 | 日本a级片视频 | 中文字幕巨大的乳专区 | 欧美乱码视频 | 97久久久久久久 | www.欧美日本韩国 | 欧美性孟交 | 婷婷综合缴情亚洲 | 精品视频一区在线视频 | 国产激情一级毛片久久久 | 暗呦交小u女国产精品视频 国产精品99无码一区二区 | 阿娇艳z门照片无码av4i | 视频在线观看入口黄最新永久免费国产 |