2011-11-18 72 views
3

您将如何使用Java的WatchEvent<T>类?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. 
    } 
} 

似乎是有点丑(当然,二else if语句可能还行,但是......)。
为什么他们不使用枚举来表示事件类型?

+1

我不知道,但我确定开发者有他们的理由。投票结束这个问题.. – mre

+0

你可以打开枚举,我没有看到它的坏事。 –

回答

0

通常在调用context的结果上会有一个表演,而不是在整个WatchEvent上进行不安全的演员表演。

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