Java7 / WatchEvent - почему это не перечисление? - PullRequest
3 голосов
/ 18 ноября 2011

Как бы вы использовали WatchEvent<T> класс Java7?

Я имею в виду:

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 заявления все еще могут быть в порядке, но ...).
Почему они не использовали enum для обозначения типов событий?

1 Ответ

0 голосов
/ 18 ноября 2011

Как правило, в результате вызова context происходит кастинг, а не небезопасный в целом WatchEvent.

Типы событий являются преднамеренно открытыми. Конкретные реализации могут возвращать свои собственные виды. Следовательно, тип Kind не может быть перечислением, хотя перечисления являются хорошим способом определения конкретных значений.

...