1.在模塊中導入com.google.auto.value:auto-value
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
api "com.google.auto.value:auto-value-annotations:1.6"
annotationProcessor "com.google.auto.value:auto-value:1.6"
}
但是編譯后會報annotationProcessor() 找不到參數的錯,導入net.ltgt.apt插件並引用即可。
2.在項目的build.gradle中引入maven坐標和dependencies,並在模塊中引用
buildscript { repositories { google() jcenter() maven { url "https://plugins.gradle.org/m2/" } } dependencies { classpath "net.ltgt.gradle:gradle-apt-plugin:0.17" classpath 'com.android.tools.build:gradle:3.1.2' } }
模塊中引用:
apply plugin: "net.ltgt.apt"
在編譯不會報錯。
3.編寫java bean:
package com.example.autovalue; import com.google.auto.value.AutoValue; @AutoValue public abstract class Animal { static Animal create(String name, int numbersOfLegs) { return new com.example.autovalue.AutoValue_Animal(name, numbersOfLegs); } public abstract String name(); public abstract int numbersOfLegs(); }
類和方法均為abstract類型的。
編寫完畢后,Build-->Build Projcet重新構建項目。在build/generated目錄中會出現AutoValue_Animal類。
右鍵generated目錄,mark directory as ----> source root,讓編譯器不報Cannot Symbol AutoValue_Animal的錯誤。
其實已經生成AutoValue_Animal.class文件了,編譯器報錯也不影響運行。
4.如果java bean實現了Parcelable類,則autuo-value會報錯,需要導入autovalue-extension即可:
annotationProcessor 'com.ryanharter.auto.value:auto-value-parcel:0.2.6'
import android.os.Parcelable; import com.google.auto.value.AutoValue; @AutoValue public abstract class Animal implements Parcelable { public static Animal create(String name, int numbersOfLegs) { return new AutoValue_Animal(numbersOfLegs, name); } public abstract int numbersOfLegs(); public abstract String name(); }
注意:auto-value生成類是immutable的,也就是說沒有setter方法。不適合頻繁更新的model
google-autovalue:immutable value-type for java 1.6+
