Java 为什么WatchService使用未绑定的通配符WatchEvent<&燃气轮机;而不是WatchEvent<;路径>;
我只是按照这一点使用了Java 为什么WatchService使用未绑定的通配符WatchEvent<&燃气轮机;而不是WatchEvent<;路径>;,java,watchservice,Java,Watchservice,我只是按照这一点使用了WatchServiceAPI。我不知道为什么 使用WatchEvent而不是WatchEvent,如果使用后者,则无需强制转换,或者WatchService可以使用任何其他情况来监视非路径事件 @SuppressWarnings("unchecked") static <T> WatchEvent<T> cast(WatchEvent<?> event) { return (WatchEvent<T>)event;
WatchService
API。我不知道为什么
使用WatchEvent
而不是WatchEvent
,如果使用后者,则无需强制转换,或者WatchService
可以使用任何其他情况来监视非路径事件
@SuppressWarnings("unchecked")
static <T> WatchEvent<T> cast(WatchEvent<?> event) {
return (WatchEvent<T>)event;
}
void processEvents() {
for (; ; ) {
...
//why doesn't the poolEvents() return WatchEvent<Path>
for (WatchEvent<?> event: key.pollEvents()) {
WatchEvent.Kind kind = event.kind();
...
//here he use a static method cast() to SuppressWarnings the unchecked warning
WatchEvent<Path> ev = cast(event);
}
}
}
@SuppressWarnings(“未选中”)
静态WatchEvent强制转换(WatchEvent事件){
返回(WatchEvent)事件;
}
void processEvents(){
对于(;;){
...
//为什么poolEvents()不返回WatchEvent
for(WatchEvent事件:key.pollEvents()){
WatchEvent.Kind-Kind=event.Kind();
...
//在这里,他使用静态方法cast()来抑制未检查的警告
WatchEvent ev=铸造(事件);
}
}
}
的Javadoc说:
文件系统报告事件的速度可能快于检索或处理事件的速度,而实现可能会对其累积的事件数量施加未指定的限制。如果实现有意丢弃事件,那么它会安排键的pollEvents方法返回事件类型为溢出的元素。使用者可以将此事件用作重新检查对象状态的触发器
类型为WatchEvent.Kind
,我认为这就是为什么pollEvents需要返回WatchEvent
列表,而不是WatchEvent
。Javadoc for OVERFLOW还提到:
此事件的上下文是特定于实现的,可能为null
这就是为什么溢出事件的类型需要是WatchEvent
请注意,您链接的教程提供了以下建议:
使用kind方法检索事件的类型。无论密钥注册了什么事件,都有可能接收溢出事件。您可以选择处理溢出或忽略它,但您应该测试它
因此,您应该在代码中添加以下内容(如果尚未添加):
if (kind == OVERFLOW) {
continue;
}