Intellij Idea 新建Andorid工程,导入google:auto-value,使用案例

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+

posted @ 2018-07-05 11:31  请叫我Dolph  阅读(1937)  评论(0编辑  收藏  举报