不能对具有JSON对象的类使用不可变注释

时间:2014-04-07 17:28:54

标签: grails groovy

我有一个简单的对象,我想让它变成不可变的。

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

由于

1 个答案:

答案 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'
)

应该解决你的问题。