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

Java7/WatchEvent-为什么它不是枚举?,java,java-7,Java,Java 7,您将如何使用Java7的WatchEvent类 我的意思是: 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 reg

您将如何使用Java7的
WatchEvent

我的意思是:

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.
    }
}
for(WatchEvent事件:key.pollEvents()){
final WatchEvent.Kind Kind=event.Kind();
/*
*此密钥仅为ENTRY_CREATE事件注册,
*但是溢出事件可能会发生,无论事件是否发生
*丢失或丢弃。
*/
如果(种类==溢出){
继续;
}
//Cast是安全的,因为我们注册了一个path实例。
@抑制警告(“未选中”)
WatchEvent ev=(WatchEvent)事件;
最终种类类型=ev.Kind();
if(type==条目\创建){
//做点什么。
}else if(type==条目\删除){
//做点什么。
}else if(type==条目\修改){
//做点什么。
}
}
看起来有点难看(嗯,两个
else if
语句可能仍然可以,但是…。

为什么他们不使用枚举来表示事件类型?

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


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

我不知道,但我相信开发人员有他们的理由。投票结束这个问题。你可以打开枚举,我看不出有什么不好的。