@groovy.transform.Immutable
Groovy を使用して、サポートされていない「不変」型のプロパティを持つクラスを実装しようとしています。私の場合はjava.io.File
たとえば、次のようなクラスを持つ
@groovy.transform.Immutable class TwoFiles {
File file1,file2
}
次のコンパイルエラーが表示されます
Groovyc: @Immutable プロセッサは、クラス TwoFiles のコンパイル中に、タイプ 'java.io.File' のフィールド 'file1' を処理する方法を知りません。@Immutable クラスは、以下を含む事実上不変の型を持つプロパティのみをサポートします。 、コレクション、マップ、配列、および特別な処理 (java.util.Date) を持つその他のクラス その他の制限が適用されます。詳細については、@Immutable の groovydoc を参照してください。
java.io.File
1つのオプションを拡張して作成することがわかりました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
直接使用する方法は他にありますか?
おそらくjava.io.File
、目的のために「既知の不変」としてマークする可能性があります( のために@groovy.transform.Immutable
行われているように見えるのと同じです)?java.awt.Color
java.net.URI