首页 > 解决方案 > Java中的可调用与供应商接口

问题描述

和包中的CallableSupplier功能接口分别具有以下签名-java.util.concurrentjava.util.function

public interface Callable<V> {
    V call() throws Exception;
}

public interface Supplier<T> {
    T get();
}

是否有一些特定的用例,它们中的每一个都比另一个更适合?

标签: javafunctional-interface

解决方案


从各自的文档中可以看出它们在用法上的区别:

Callable

返回结果并可能引发异常的任务。实现者定义了一个没有参数的方法,称为 call。

Callable 接口类似于 Runnable,因为两者都是 为实例可能由另一个线程执行的类设计的

Supplier

代表结果的提供者。

不要求每次调用供应商时都返回新的或不同的结果。

这意味着调用者Callable.call期望抛出异常并将相应地处理异常。这对于诸如读取和写入文件之类的任务很有用,其中IOException可以抛出多种类型的 s。Callable也被设计为在另一个线程上运行。

Supplier另一方面,很一般。它只是“提供一个价值”,仅此而已。

所以CallableSupplier. 如果您不处理另一个线程或者您的任务不太可能抛出异常,Supplier建议使用。


推荐阅读