Почему у меня есть возможность удалить броски пункта здесь, даже если интерфейс я наследовать от определил это?

голоса
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ваши не должны были бросить CloneNotSupportedException, который также проверяемым исключение, для вашего кода для компиляции (не то, что это канонический reommendation, конечно). Несмотря на то, Object«s .clone()бросает его .

И в самом деле, когда вы @Overrideклонировать () и не объявить его бросить CloneableNotSupportedException, он все еще компилирует.

НО.

Тогда я попытался это:

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

Callableпредполагается бросить , Exceptionно до сих пор он компилирует; Однако, если я:

callable.call();

то это ошибка компиляции ...

Что есть что?


EDIT OK, есть большая разница; Cloneableникак не определяют clone(); Objectделает.

Задан 18/12/2014 в 20:43
источник пользователем
На других языках...                            


1 ответов

Почему у меня есть возможность удалить броски пункта здесь, даже если интерфейс я наследовать от определил это?

голоса
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ваши не должны были бросить CloneNotSupportedException, который также проверяемым исключение, для вашего кода для компиляции (не то, что это канонический reommendation, конечно). Несмотря на то, Object«s .clone()бросает его .

И в самом деле, когда вы @Overrideклонировать () и не объявить его бросить CloneableNotSupportedException, он все еще компилирует.

НО.

Тогда я попытался это:

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

Callableпредполагается бросить , Exceptionно до сих пор он компилирует; Однако, если я:

callable.call();

то это ошибка компиляции ...

Что есть что?


EDIT OK, есть большая разница; Cloneableникак не определяют clone(); Objectделает.

Ответил 18/12/2014 в 20:43
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more