zoukankan      html  css  js  c++  java
  • 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+

  • 相关阅读:
    Ruby小白入门笔记之<个人记录档>
    Windows 10下怎么远程连接 Ubuntu 16.0.4(小白级教程)
    Ruby小白入门笔记之<Rails项目目录结构>
    GitHub 上传文件
    机器学习:项目流程及方法(以 kaggle 实例解释)
    数据科学:待学习的内容
    机器学习:项目流程
    数据科学:numpy.where() 的用法
    数据科学:Pandas 和 Series 的 describe() 方法
    Kaggle 比赛项目总结(项目流程)
  • 原文地址:https://www.cnblogs.com/DolphWang/p/9267444.html
Copyright © 2011-2022 走看看