Eclipse 防止@Immutable注释中出现空构造函数

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

我使用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 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注释。。。