有没有人尝试在番石榴中创建不可变转发装饰器

时间:2013-02-28 16:52:46

标签: java collections guava

我刚开始尝试使用装饰器。我没有看到的一件事是永恒的转发装饰者。我正在处理的示例代码是here

似乎我可以为装饰器指定一个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中从哪里开始?

1 个答案:

答案 0 :(得分:0)

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

通常,Guava不可变集合是故意不可子类化的,因此您不能将子类化为子类。 ImmutableSet具有实际上不可变的实现。