2013-10-08 3 views
0

В этом classИспользование дженериков в качестве модификатора доступа метод Java

Что этот метод подписи означает?

<E extends RuntimeException> void genericThrow() throws E 

Я ожидал увидеть что-то вроде государственных, частных и т.д. вместо <E extends RuntimeException>

+3

Это [Общий метод] (http://docs.oracle.com/javase/tutorial/extra/generics/methods.html) –

+1

Отсутствие модификатора доступа делает его приватным. –

+2

Область «По умолчанию» (package-rpivate), общий тип E, который расширяет RuntimeException, тип возврата void с именем «genericThrow», который генерирует исключение типа E. – initramfs

ответ

4

Вполне возможно этот метод, чтобы иметь модификатор доступа; у него просто нет. Это означает, что это пакет-частный.

public <E extends RuntimeException> void genericThrow() throws E 
private <E extends RuntimeException> void genericThrow() throws E 
protected <E extends RuntimeException> void genericThrow() throws E 

<E extends RuntimeException> объявляет обобщенный параметр типа под названием E с верхней гранью. То есть E должен быть RuntimeException или подкласс.

+0

Спасибо. Но что такое универсальный метод. Из документов оракула я не могу понять, что проверяет тип проверки, создавая общий метод. В нашем примере это означает, что метод может генерировать только исключение, являющееся подклассом RuntimeException? Я думал, что это должно быть написано как: void genericThrow() throws Victor

+0

Для метода, который может вызывать любое 'RuntimeException', дженерики не нужны. 'void genericThrow() throws RuntimeException' будет достаточным. Создание генератора исключений здесь действительно не помогает, потому что вы не можете сказать 'throw new E()'. Вы также можете просто сказать 'catch (RuntimeException e)' при вызове метода, чтобы все их поймать. – rgettman

+0

Почему мы не можем сказать: void genericThrow() throws Victor

Смежные вопросы