Java中的可调用与供应商接口

2022-09-01 16:59:42

和封装中的和功能接口分别具有以下签名-CallableSupplierjava.util.concurrentjava.util.function

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

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

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


答案 1

从各自的文档可以看出它们的用法差异:

可调用

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

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

供货商

表示结果的供应商。

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

这意味着 的调用方期望引发异常,并将相应地处理异常。这对于读取和写入文件等任务非常有用,在这些任务中可以抛出多种 s。 还设计为在另一个线程上运行。Callable.callIOExceptionCallable

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

所以比更专业。如果您没有处理其他线程,或者您的任务不太可能引发异常,则建议这样做。CallableSupplierSupplier


答案 2

除了显而易见的 Callable 抛出异常之外,区别在于语义。它们有不同的名称,因为它们代表不同的东西。目的是使代码更易于理解。使用 Callable 时,接口选择意味着该对象将由另一个线程执行。当您使用 Supplier 时,您暗示它只是一个向另一个组件提供数据的对象。


推荐