小编Arn*_*cek的帖子

具有(im)可变属性的Groovy @Immutable类

我正在尝试使用Groovy @groovy.transform.Immutable来实现具有不受支持的"不可变"类型属性的类.就我而言java.io.File

例如,有类似的

@groovy.transform.Immutable class TwoFiles {
    File file1,file2
}
Run Code Online (Sandbox Code Playgroud)

给我以下编译错误

Groovyc:@Immutable处理器在编译类TwoFiles时不知道如何处理'java.io.File'类型的字段'file1'.@Immutable类仅支持具有有效不可变类型的属性,包括: - 字符串,基本类型,包装类型,BigInteger和BigDecimal,枚举 - 其他@Immutable类和已知不可变类(java.awt.Color,java.net.URI) - 可克隆类,集合,映射和数组,以及其他具有特殊处理的类(java.util.Date)其他限制适用,请参阅groovydoc for @Immutable以获取更多详细信息

我找到了一个选项来扩展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 ...
    }
}
Run Code Online (Sandbox Code Playgroud)

所以我的问题是:有没有其他选择如何java.io.File 直接在这样的类中使用?

可能标记java.io.File为"知不可变"为宗旨,以@groovy.transform.Immutable(同它似乎是做了java.awt.Color,java.net.URI)?

groovy immutability

4
推荐指数
1
解决办法
1207
查看次数

标签 统计

groovy ×1

immutability ×1