首页 > 技术 > 编程 > Java > 帮我生成java类的库GeneratorX

帮我生成java类的库GeneratorX


一个帮我生成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一下

@SimpleGenerator
public 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


扫我,我给你讲段子。

感谢关注 Ithao123Java频道,ithao123.cn是专门为互联网人打造的学习交流平台,全面满足互联网人工作与学习需求,更多互联网资讯尽在 IThao123!

关键词:

精选专题

Laravel是一套简洁、优雅的PHP Web开发框架(PHP Web Framework)。它可以让你从面条一样杂乱的代码中解脱出来;它可以帮你构建一个完美的网络APP,而且每行代码都可以简洁、富于表达力。

Hadoop是一个由Apache基金会所开发的分布式系统基础架构。 用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。 Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS。HDFS有高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上;而且它提供高吞吐量(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序。HDFS放宽了(relax)POSIX的要求,可以以流的形式访问(streaming access)文件系统中的数据。 Hadoop的框架最核心的设计就是:HDFS和MapReduce。HDFS为海量的数据提供了存储,则MapReduce为海量的数据提供了计算。

产品设计是互联网产品经理的核心能力,一个好的产品经理一定在产品设计方面有扎实的功底,本专题将从互联网产品设计的几个方面谈谈产品设计

随着国内互联网的发展,产品经理岗位需求大幅增加,在国内,从事产品工作的大部分岗位为产品经理,其实现实中,很多从事产品工作的岗位是不能称为产品经理,主要原因是对产品经理的职责不明确,那产品经理的职责有哪些,本专题将详细介绍产品经理的主要职责