【发布时间】:2013-01-06 19:00:46
【问题描述】:
我正在尝试使用 Groovy @groovy.transform.Immutable 来实现具有不受支持的“不可变”类型属性的类。就我而言,它是java.io.File
例如,有类似的类
@groovy.transform.Immutable class TwoFiles {
File file1,file2
}
给我以下编译错误
Groovyc:@Immutable 处理器在编译类 TwoFiles 时不知道如何处理类型为“java.io.File”的字段“file1”。 @Immutable 类仅支持具有有效不可变类型的属性,包括: - 字符串、原始类型、包装器类型、BigInteger 和 BigDecimal、枚举 - 其他@Immutable 类和已知的不可变对象(java.awt.Color、java.net.URI) - 可克隆的类、集合、映射和数组,以及其他具有特殊处理的类 (java.util.Date) 其他限制适用,请参阅@Immutable 的 groovydoc 了解更多详情
我发现一个选项可以扩展java.io.File 以使其成为Cloneable,但我对这个解决方案不满意。以下代码可以编译并运行,但拥有自己的 java.io.File 子类不是我想要的。
@groovy.transform.Immutable class TwoCloneableFiles {
FileCloneable file1,file2
class FileCloneable extends File implements Cloneable{
FileCloneable(String s) {
super(s)
}
// ... and other constructors ...
}
}
所以我的问题是:有没有其他选项如何在此类中使用java.io.File直接?
为了@groovy.transform.Immutable 的目的,可能将java.io.File 标记为“已知不可变”(与java.awt.Color、java.net.URI 似乎相同)?
【问题讨论】:
标签: groovy immutability