2

有问题的接口是FileVisitor,它定义了这个方法:

FileVisitResult preVisitDirectory(T dir, BasicFileAttributes attrs)
    throws IOException;

我非常简单的实现是这样的:

public final class FailFastDeletionVisitor
    implements FileVisitor<Path>
{
    private final FileSystemProvider provider;

    public FailFastDeletionVisitor(final Path victim)
    {
        provider = Objects.requireNonNull(victim).getFileSystem().provider();
    }

    @Override
    public FileVisitResult preVisitDirectory(final Path dir,
        final BasicFileAttributes attrs)
        throws IOException // <-- HERE
    {
        return FileVisitResult.CONTINUE;
    }

    // etc etc    
}

在这段代码摘录中标记的地方<-- HERE,奇怪的是,IDEA(因为这是我选择的 IDE)告诉我声明该异常是不必要的......

由于 IDEA 并非没有错误,因此我决定尝试一下。我删除了异常并编译了!所以,IDEA 是对的。

然后我记得如果你实现Cloneable了你不需要 throw CloneNotSupportedException,这也是一个检查的异常,你的代码可以编译(当然,这不是规范的建议)。尽管Object's .clone()throws it

实际上,当您@Overrideclone() 并且不将其声明为 throwCloneableNotSupportedException时,它仍然可以编译。

但。

然后我尝试了这个:

final Callable<Void> callable = new Callable<Void>()
{
    @Override
    public Void call()
    {
        return null;
    }
}

Callable应该抛出Exception,但到目前为止它可以编译;但是,如果我:

callable.call();

那么这是一个编译错误...

什么是什么?


编辑好的,有很大的不同;Cloneable没有定义;_ 做。clone()Object

4

0 回答 0