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

最佳答案

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

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

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

10-10 06:46