Java7/WatchEvent-为什么它不是枚举?
您将如何使用Java7的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
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
的类型不能是枚举,尽管枚举是定义特定值的好方法。我不知道,但我相信开发人员有他们的理由。投票结束这个问题。你可以打开枚举,我看不出有什么不好的。