在企业 Android 应用开发中,往往需要面对大量的数据对象(POJO), 而且这些对象通常都会有比较的属性。为每个属性编写 get/set, toString 这些方法是件繁重而无趣的事情。使用 Lombok 库可以帮助我们解决这个问题。
安装 Lombok 插件
Lombok 是一种编译期代码生成技术,要想在 IDE 上能识别,需要安装对于的插件。在 Android Studio 中,安装步骤如下:
- 在菜单中选择 File -> Settings, 然后在弹出窗口中选择 Plugins
- 在弹出框的右边输入 Lombok
- 选择 Lombok 进行安装,如图:
- 安装完成以后,按照提示重启 Android Studio 即可
插件只需要安装一次,以后只需要在每个项目中设置 Lombok 支持就可以了。
为项目设置 Lombok
在 Android 项目的app模块的 build.gradle 文件中,加入以下两行依赖:
1 2
| compileOnly 'org.projectlombok:lombok:1.18.8' annotationProcessor 'org.projectlombok:lombok:1.18.8'
|
加完以后完整的 build.gradle 文件如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
| apply plugin: 'com.android.application'
android { compileSdkVersion 29 buildToolsVersion "29.0.1" defaultConfig { applicationId "cn.com.hohistar.tutorial.basicwidgettutorial" minSdkVersion 26 targetSdkVersion 29 versionCode 1 versionName "1.0" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } } compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } }
dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) implementation 'androidx.appcompat:appcompat:1.0.2' implementation 'androidx.constraintlayout:constraintlayout:1.1.3' testImplementation 'junit:junit:4.12' androidTestImplementation 'androidx.test:runner:1.2.0' androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0' implementation 'com.jakewharton:butterknife:10.1.0' annotationProcessor 'com.jakewharton:butterknife-compiler:10.1.0' compileOnly 'org.projectlombok:lombok:1.18.8' annotationProcessor 'org.projectlombok:lombok:1.18.8' }
|
新加的内容在第35,36行。
为实体类加入 Lombok 的注解
假设有一个表示待办事项实体类,包含 id, title, description 和 done 四个属性,按照传统的写法,需要写53行代码,这还没包括各种构造函数,代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
| public class Todo {
private int id;
private String title;
private String desc;
private Boolean done;
public int getId() { return id; }
public void setId(int id) { this.id = id; }
public String getTitle() { return title; }
public void setTitle(String title) { this.title = title; }
public String getDesc() { return desc; }
public void setDesc(String desc) { this.desc = desc; }
public Boolean getDone() { return done; }
public void setDone(Boolean done) { this.done = done; }
@Override public String toString() { final StringBuffer sb = new StringBuffer("Todo{"); sb.append("id=").append(id); sb.append(", title='").append(title).append('\''); sb.append(", desc='").append(desc).append('\''); sb.append(", done=").append(done); sb.append('}'); return sb.toString(); } }
|
同样功能的代码,在使用 lombok 后,可以简化为这样:
1 2 3 4 5 6 7 8 9 10 11 12
| @Data public class Todo {
private int id;
private String title;
private String desc;
private Boolean done;
}
|
更重要的是后期维护时,增加属性,修改属性名称都会变得很简单。