我刚开始尝试使用装饰器。我没有看到的一件事是永恒的转发装饰者。我正在处理的示例代码是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中从哪里开始?
答案 0 :(得分:0)
如果您想要对不可变集合的变异方法发出警告,您必须通过在转发装饰器上将变异方法标记为@Deprecated
来自行添加它们。
通常,Guava不可变集合是故意不可子类化的,因此您不能将子类化为子类。 ImmutableSet
具有实际上不可变的实现。