Eclipse 防止@Immutable注释中出现空构造函数
我使用groovy并喜欢它。问题是,此注释不仅创建具有指定类字段的构造函数,而且还创建空构造函数,并允许字段部分保持null(或采用默认值)。我想阻止这一切 例如:Eclipse 防止@Immutable注释中出现空构造函数,eclipse,groovy,null,annotations,immutability,Eclipse,Groovy,Null,Annotations,Immutability,我使用groovy并喜欢它。问题是,此注释不仅创建具有指定类字段的构造函数,而且还创建空构造函数,并允许字段部分保持null(或采用默认值)。我想阻止这一切 例如: @Immutable class User { int age} 可以说像 User jasmin = new User(30) println "I am ${jasmin.age} years old" // I am 30 years old 但也喜欢 User james = new User() //Uhoh, I h
@Immutable class User { int age}
可以说像
User jasmin = new User(30)
println "I am ${jasmin.age} years old" // I am 30 years old
但也喜欢
User james = new User() //Uhoh, I have no age
println "I am ${james.age} years old" // I am 0 years old - maybe not expected
因此,我的问题是:是否有任何注释或其他方式阻止调用空构造函数?当运行时没有传递age
时,可能会引发异常(或为其传递null)。如果我获得了EclipseIDE支持,那么eclipse在编译时会抱怨一个空构造函数调用,这会给我带来额外的好处
对于groovy,我没有找到类似@NotNull的东西,但是对于java,我发现了不同的注释。使用其中一个是个好主意吗?如何决定?还是编写自己的自定义注释更好?这样做可以得到IDE的帮助吗?我同意你的观点;
@Immutable
属性中应该有一个选项,以防止生成默认构造函数
就解决方法而言,这可能没有你想要的那么优雅,但我把它扔出去了。如果在没有默认构造函数的情况下创建可变超类型,则可以使用@Immutable
版本对其进行扩展。例如:
import groovy.transform.*
class MutableUser {
int age
// defining an explicit constructor suppresses implicit no-args constructor
MutableUser(int age) {
this.age = age
}
}
@Immutable
@InheritConstructors
class User extends MutableUser {
}
User jasmin = new User() // results in java.lang.NoSuchMethodError
但总的来说,这似乎是一个不必要的样板,只是为了抑制一个无参数构造函数。它也不能帮助我处理空值参数。我想实现的是,没有参数是
null
。不过,它有助于调用空构造函数,但也需要具有映射构造函数的注释的帮助。我想我需要深入研究注释和AST转换,并在groovy中创建自己的NotNull注释。。。