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+