0

我刚开始尝试装饰器。我还没有看到的一件事是不可变转发装饰器。我正在处理的示例代码在这里

似乎我可以为装饰器指定一个 ImmutableSet,但如果 ImmutableSet 是 ForwardingSet 的“委托”,则没有编译时警告。

我是否需要扩展 ForwardingSet 并创建 ForwardingImmutableSet 然后将其用作我的装饰器?

有没有人试过这个?

任何意见将是有益的。

使用上面提供的代码链接试试这个:

public void test1()
    {
        final ImmutableSet<String> stringsA = ImmutableSet.of("A1", "A2", "A3");

        final ISetA a = SetA.of(stringsA);

        a.add("A0");                // Run-time error
        stringsA.add("A0");     // Compile time warning, Run-time error
    }

我只想查看“a.add("A0");”的编译时警告

当然我可以选择创建一个更受限制的接口,我可能只是从那里开始,但我想知道我是否必须做一个 ForwardingImmutableSet 我从哪里开始?

4

1 回答 1

0

如果您想对不可变集合上的突变方法发出警告,则必须通过将突变方法标记为@Deprecated转发装饰器来自己添加它们。

一般来说,Guava 不可变集合是故意不可子类化的,因此您不能ImmutableSet使用实际上不是不可变的实现进行子类化。

于 2013-02-28T18:06:47.207 回答