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

时间:2011-11-18 17:59:20

标签: java java-7

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

我的意思是:

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语句可能仍然可以,但是...)。
他们为什么不使用枚举来表示事件类型?

1 个答案:

答案 0 :(得分:0)

通常会调用context而不是在整个WatchEvent上进行不安全的转换。

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