我有一个简单的对象,我想让它变成不可变的。
import grails.converters.JSON
@Immutable
class Response {
JSON jsonResponse
int httpStatusCode
String message
}
当我尝试编译时,我得到:
| Error Fatal error during compilation org.apache.tools.ant.BuildException: Compilation Failed
java.lang.NullPointerException
at org.codehaus.groovy.ast.CodeVisitorSupport.visitBlockStatement(CodeVisitorSupport.java:35)
at org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitBlockStatement(ClassCodeVisitorSupport.java:163)
如果我这样做:
@Immutable(knownImmutableClasses = [JSON])
我也一样。
如果删除JSON对象,一切都很好。所以这就是问题所在。有什么想法吗?
我正在使用Grails 2.2.1和Groovy 2.1.6
由于
答案 0 :(得分:2)
我不确定你为什么会得到这个NullPointerException
,但将JSON
属性标记为不可变的类没有任何意义,因为JSON
是实际上并不是一成不变的。你可以欺骗编译器并假装它是@Immutable(knownImmutableClasses = [JSON])
不可变的,但这实际上并不会使它成为不可变的。
如果您将班级更改为
@Immutable
class Response {
String jsonResponse
int httpStatusCode
String message
}
并像这样实例化:
def someObject = [1: 2, foo: 'foo']
def response = new Response(
jsonResponse: someObject as JSON,
httpStatusCode: 200,
message: 'hello'
)
应该解决你的问题。