具有(im)可变属性的Groovy @Immutable类
我正在尝试使用Groovy @ groovy.transform.Immutable来实现具有不受支持的“不可变”类型属性的类.在我的例子中,它是
java.io.File
例如,有类似的 @groovy.transform.Immutable class TwoFiles { File file1,file2 } 给我以下编译错误
一个选项我发现它扩展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似乎相同)? 解决方法
您是否尝试使用
knownImmutableClasses 指定文件?这样的事情应该有效:
@groovy.transform.Immutable(knownImmutableClasses = [File]) class TwoFiles { File file1,file2 } (使用File,您可能还可以通过以下方式获得所需的效果: @groovy.transform.Immutable class TwoFiles { String file1,file2 public File getFile1() {return new File(file1)} public File getFile2() {return new File(file2)} } def f = new TwoFiles("/","/Users") assert f.file1.class == File ) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |