【问题标题】:Has anyone tried creating Immutable Forwarding Decorators in Guava有没有人尝试在 Guava 中创建不可变转发装饰器
【发布时间】:2013-02-28 16:52:46
【问题描述】:

我刚刚开始尝试使用装饰器。我还没有看到的一件事是不可变转发装饰器。我正在处理的示例代码是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 我从哪里开始?

【问题讨论】:

    标签: java collections guava


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-06-16
      • 2022-08-19
      • 2017-02-04
      • 2018-02-19
      • 2012-02-06
      • 2021-12-16
      • 2019-10-23
      • 1970-01-01
      相关资源
      最近更新 更多