帮我生成java类的库GeneratorX

来源:互联网 发布:ubuntu vmdkmount 编辑:程序博客网 时间:2024/05/10 16:36

一个帮我生成java类的库GeneratorX

写一个标准的java类确实太累了,需要如下方法和代码段,
* 默认构造函数 和 非默认构造函数
* get set
* hascode
* toString
* equals
* implements Parcelable 需要的代码

就算你只有三个字段,等你写好了,差不多100行+,心太累所以想要一个自动帮我生成的,之前找了几个生成代码的第三方的库,帮我生成javaclass的代码的库,找到一些,但是发现对我并不合适,要么序列化不支持,要么因为类的定义的特殊导致json框架无法处理的问题,还有无法修改字段的问题杂七杂八的。

一直使用一个IDEA的插件,帮我生成一些代码,但是发现那个插件有些bug,生成的代码有时候时错误的。

于是我就自己操刀写了一个,github在此。

GeneratorX

帮助项目开发时,自动生成类的代码。

会自动生成如下代码
* 默认构造函数 和 非默认构造函数
* get set
* hascode
* toString
* equals
* implements Parcelable 需要的代码


使用

先下载jar包:点我下载

1.apt依赖

以为涉及到编译时生成,所以需要apt插件,apt是gradle的一个插件,他使注解处理器生成的代码能被Android Studio正确的引用。
教程:http://code.neenbedankt.com/gradle-android-apt-plugin/

2.gradle中使用apt依赖javapoet和jar

    apt fileTree(dir: 'libs', include: ['*.jar'])//这句加的    compile fileTree(dir: 'libs', include: ['*.jar'])    apt 'com.squareup:javapoet:1.4.0'    compile 'com.squareup:javapoet:1.4.0'

 3.添加一个注解 

@SimpleGenerator  public class CLName可选 implements Parcelable 如果你需要做序列化的话  

开始写java代码:

当我写出如下代码,我build一下

@SimpleGeneratorpublic abstract class PersonBean implements Parcelable {    public Enum s;    public String name;    public int age = 0;    public CharSequence str;}

build 一下 自动帮我生成一个类

package com.androidyuan.model;import android.os.Parcel;import android.os.Parcelable;import android.text.TextUtils;import com.androidyuan.Helper.ClsHelper;import java.lang.CharSequence;import java.lang.Enum;import java.lang.Object;import java.lang.Override;import java.lang.String;public class PersonBeanX extends PersonBean {  public static final Parcelable.Creator<PersonBeanX> CREATOR = new Parcelable.Creator<PersonBeanX>() {    @Override    public PersonBeanX createFromParcel(Parcel in) {      return new PersonBeanX(in);    }    @Override    public PersonBeanX[] newArray(int size) {      return new PersonBeanX[size];    }  };  private Enum s;  private String name;  private int age;  private CharSequence str;  public PersonBeanX() {  }  public PersonBeanX(Enum s, String name, int age, CharSequence str) {    this.s = s;    this.name = name;    this.age = age;    this.str = str;  }  public PersonBeanX(Parcel in) {    this.s = Enum.valueOf(Enum.class, in.readString());    this.name = in.readString();    this.age = in.readInt();    this.str = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(in);  }  @Override  public void writeToParcel(Parcel dest, int flags) {    dest.writeSerializable(s);    dest.writeInt(age);    TextUtils.writeToParcel(str, dest, flags);  }  public void setS(Enum s) {    this.s = s;  }  public Enum getS() {    return this.s;  }  public void setName(String name) {    this.name = name;  }  public String getName() {    return this.name;  }  public void setAge(int age) {    this.age = age;  }  public int getAge() {    return this.age;  }  public void setStr(CharSequence str) {    this.str = str;  }  public CharSequence getStr() {    return this.str;  }  @Override  public int describeContents() {    return 0;  }  @Override  public int hashCode() {    return ClsHelper.hashCode(s , name , age , str);  }  @Override  public boolean equals(Object o) {        if (o == null) return false;        if (o == this) return true;        if (o instanceof PersonBeanX) {            if (o.hashCode() == this.hashCode()) return true;        }        return false;  }  @Override  public String toString() {    return "PersonBeanX{"+"s =  "+s+","+"name =  "+name+","+"age =  "+age+","+"str =  "+str.toString()+"}";  }}


代码写的比较急,两周不到完成,应该有些缺陷,欢迎提issues。

鸣谢

https://github.com/square/javapoet


扫我,我给你讲段子。

0 0