Java7/WatchEvent - 为什么它不是枚举?

标签 java java-7

您将如何使用WatchEvent<T> Java7的类?

我的意思是:

for (WatchEvent<?> event : key.pollEvents()) {
    final WatchEvent.Kind<?> kind = event.kind();

    /*
     * This key is registered only for ENTRY_CREATE events,
     * but an OVERFLOW event can occur regardless if events are
     * lost or discarded.
     */
    if (kind == OVERFLOW) {
        continue;
    }

    // Cast is safe because we registered a path instance.
    @SuppressWarnings("unchecked")
    WatchEvent<Path> ev = (WatchEvent<Path>)event;
    final Kind<Path> type = ev.kind();
    if (type == ENTRY_CREATE) {
        // Do something.
    } else if (type == ENTRY_DELETE) {
        // Do something.
    } else if (type == ENTRY_MODIFY) {
        // Do something.
    }
}

似乎有点难看(嗯,两个 else if 语句可能仍然可以,但是......)。
他们为什么不使用枚举来表示事件类型?

最佳答案

通常会对调用 context 的结果进行强制转换,而不是对整个 WatchEvent 进行不安全的强制转换。

事件的类型故意是开放式的。特定的实现可以返回它们自己的类型。因此,Kind 的类型不能是枚举,尽管枚举是定义特定值的好方法。

关于Java7/WatchEvent - 为什么它不是枚举?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8186842/

相关文章:

playframework - 方法模型中操作数堆栈上的错误类型.MyModel

java - Java 7 中的抗锯齿发生了什么变化?

java - 更改背景颜色可编辑 JComboBox

java - 如何从另一个类调用方法?

java - 另一个 "Comparison method violates its general contract!"

Java SE 6 编译的应用程序部署到 Java SE 7 运行时环境 - 随机 JVM 崩溃,没有 Throwables?

java - 在客户端寻找 native java CORBA 的超时属性

java - JPA native 查询结果集映射不起作用?

java - 读取文本文件时如何读取前两行

java - 在 Java 中使用 Apache Fop 嵌入条形码