代码之家  ›  专栏  ›  技术社区  ›  Emil

谷歌番石榴供应商示例

  •  34
  • Emil  · 技术社区  · 15 年前

    请用一个合适的例子解释接口供应商(在番石榴)的使用。

    7 回复  |  直到 15 年前
        1
  •  41
  •   martieva    7 年前

    这个 Supplier 接口只是一个无参数函数的抽象,它返回一个值。。。它是一个 . 因为它是如此的普遍,它可以用很多东西。贾里德解释了 Multimaps 工厂将其用作创建 Collection

    考虑到界面的简单性,它还允许对 供应商 把它包在另一个 这会以某种方式改变它的行为。备忘录就是一个例子。我用过 Suppliers.memoizeWithExpiration 方法本身是一种简单的方法,可以使某些数据在给定的时间段内最多只能从服务器读取一次。

    我也建议你看看Guice和 Provider 它使用接口。 完全等同于 供应商 是Guice工作的核心。

    • 供应商 get() 方法,该方法可以执行创建新对象所需的任何代码,因此它们不限于让Guice单独使用构造函数来创建对象。在这里,他们用它来定义一个自定义 对象的新实例。
    • Guice允许注入 任何依赖。每次都可能返回一个新实例 获取() 或者它可能总是返回一个实例或两者之间的任何内容,这取决于绑定 供应商 供应商 a级 创建对象的方法 获取() 被称为。
    • 供应商 s构成了范围界定的基础。如果你看看 Scope 接口,您将注意到它的单个方法 Provider<T> scope(Key<T> key, Provider<T> unscoped) 定义为 供应商 s、 这种方法需要 创建对象的新实例的东西 (在 Provider<T> unscoped Provider<T> 基于应用作用域定义的任何策略,可能返回对象的某些缓存实例,而不是创建新实例。违约 NO_SCOPE 范围只是沿着 unscoped provider,意味着每次都会创建一个新实例。这个 SINGLETON 作用域缓存第一次调用的结果 unscoped.get() 然后返回单个实例,确保依赖于单例作用域对象的所有内容都得到对该单个对象的引用。请注意 由 单重态 scope 方法可以 本质上是一样的 供应商 返回者 Suppliers.memoize
        2
  •  14
  •   Deekshith    9 年前

    我们把供应商包括在番石榴的主要原因是为了支持 Multimaps 生成任意多重映射的方法,例如

    public static <K,V> Multimap<K,V> newMultimap(Map<K,Collection<V>> map,
        Supplier<? extends Collection<V>> factory)
    

    供应商创建一个集合,该集合保存给定密钥的所有值。当您存储的键值对的键不在多重映射中时,多重映射将使用Supplier。

        3
  •  7
  •   Christoffer Hammarström    13 年前

    Supplier.get() is 打电话。

    例如,我有一个名为 SmtpMailSender ,它接受smtp服务器的主机名。但是,主机名可以在运行时更改,因此 String hostname Supplier<String> hostname .

        4
  •  3
  •   amertum    15 年前
        5
  •  2
  •   Community Mohan Dere    9 年前
        6
  •  1
  •   thSoft    14 年前

    该类的另一个重要用途是分离——如果一个组件只使用另一个组件来获取值,则不依赖于具体实现,而是依赖于此接口。

    http://www.slideshare.net/tfnico/google-guava

        7
  •  0
  •   Matt user129975    9 年前