@SuperBuilder
public abstract class Parent {
int x;
int y;
int z;
int a;
}
@SuperBuilder
public abstract class Child extends Parent {
int b;
int c;
int d;
// I want something like
public static class ChildBuilder {
public Child build() {
Child child = // Get child somehow;
validate(child);
}
}
}
为@superbuilder
生成的代码很复杂,并且加载了类型参数。因此,建议将您的类delombok
并将输出用作引用。
您可以使用以下命令执行此操作:
java -jar path/to/lombok.jar delombok -p path/to/src/main/java/Child.java
输出将显示lombok生成的代码。我假设子类
不是抽象的(我认为您的问题中有一个错误)。您希望自定义build()
方法,因此您对ChildBuilderImpl
感兴趣,因为该类包含该方法。您可以将类头复制到源文件中,并添加自定义build()
方法:
private static final class ChildBuilderImpl extends Child.ChildBuilder<Child, Child.ChildBuilderImpl> {
@java.lang.Override
public Child build() {
// Do validation here, e.g.:
if (((Child.ChildBuilder<?, ?>)this).b == 0)
throw new IllegalArgumentException("b must not be 0");
return new Child(this);
}
}
我在代码中使用Lombok自动生成getter和setter代码。我想添加其他个人注释并使用它。 例如,我想添加一个方法来验证列表中是否存在一个键: 创建注释后,我将执行以下操作:
android { dexOptions { incremental false preDexLibraries = false jumboMode = false javaMaxHeapSize "2048M" } } 这将会影响到所有使用 dex 的 task。
android { aaptOptions { noCompress 'foo', 'bar' ignoreAssetsPattern "!.svn:!.git:!.ds_store:!*.scc:.*:<dir>_*:!CVS:!thumbs.db:!picasa.ini:!*~" } } 这将会影响所有使用 aapt 的 task。
一般的 Java 项目中有一组 task 用于协同处理并最终生成一个输出。 classes task 用于编译 Java 源代码。 可以在 build.gradle 文件中使用 classes 访问 classes task 。classes 是 project.tasks.classes 的缩写。 相比之下在 Android 项目中这就有点复杂。因为 Android 项目中会有大量相同的 tas
ProGuard 插件是自动添加进来的,如果 Build Type 的 minifyEnabled 属性被设置为 true,对应的 task 将会自动创建。 android { buildTypes { release { minifyEnabled true proguardFile getDefaultProguardFi
3.4.2 构建类型 默认情况下,Android plugin 会自动的设置工程,构建 release 和 debug 两个版本。 他们主要的差异主要在于是否可以在设备上调试应用以及APK如何签名。 debug 版本会被使用已知的名称/密码自动生成的密钥/证书签名。release 版本在构建过程中不会被签名,需要构建后再签名。 这些配置可以通过一个叫 BuildType 配置。默认情况下,已经创建