【发布时间】:2015-04-06 15:23:58
【问题描述】:
我知道这听起来像是一个愚蠢的问题。但是由于 InterruptibleChannel 只声明了一种方法:
void close()
throws IOException
这与 Channel 接口中的名称/签名相同。这种接口继承的目的是什么?
这是用于 Java 运行时的反射目的吗?
【问题讨论】:
标签: java inheritance interface extends
我知道这听起来像是一个愚蠢的问题。但是由于 InterruptibleChannel 只声明了一种方法:
void close()
throws IOException
这与 Channel 接口中的名称/签名相同。这种接口继承的目的是什么?
这是用于 Java 运行时的反射目的吗?
【问题讨论】:
标签: java inheritance interface extends
它是相同的签名,但它表示也可以抛出AsynchronousCloseException(这也是一个IOException)。
实际上,这实际上是一个“标记”接口,虽然在功能上等同于使用Channel,但使用InterruptibleChannel 可能会使阅读代码的任何人更清楚地了解它的用法。
【讨论】:
目的是将可中断通道提供的合同直接编码到类型系统中。合同的保证被认为足够重要,足以证明这一点。
在InterruptibleChannel的文档中特别注意这句话:
通道支持异步关闭和中断当且仅当它实现此接口。如有必要,可以通过
instanceof运算符在运行时进行测试。
【讨论】: