我读到一个人无法在Java中创建接口实例,但在以下代码中,Executors.newSingleThreadExecutor()
返回ExecutorService
实例,尽管ExecutorService
是一个接口:< / p>
//WorkerThread is a class that implements Runnable
WorkerThread worker = new WorkerThread();
Executor exec=Executors.newSingleThreadExecutor();
exec.execute(worker);
答案 0 :(得分:0)
您无法创建接口的实例,但您当然可以创建实现该接口的类的实例。
Executors.newSingleThreadExecutor()
返回类FinalizableDelegatedExecutorService
的实例,该实例实现ExecutorService
接口。
public static ExecutorService newSingleThreadExecutor() {
return new FinalizableDelegatedExecutorService
(new ThreadPoolExecutor(1, 1,
0L, TimeUnit.MILLISECONDS,
new LinkedBlockingQueue<Runnable>()));
}
答案 1 :(得分:0)
当一个类实现某个接口时,它可以被实例化为该接口。
interface TheInterface {}
class Test implements TheInterface {}
...
TheInterface test = new Test();
答案 2 :(得分:0)
ExecutorService
是一个接口并扩展Executor
,这也是一个暴露某些方法的接口。举个例子,你可以在调用Executors.newSingleThreadExecutor()
时返回它的实例实现Executor的ThreadPoolExecutor
,你可以写。
Executor executor=Executors.newSingleThreadExecutor();
并且您只能调用Executor接口上可用的方法,即该接口上的execute(Runnable command)
。
对于无法使用界面
直接创建的界面Executor executor =new Executor();//Not possible
最佳做法请参考使用界面,以便您可以在不更改代码的情况下更改实施