2013-07-22 3 views
-1

чем разница между этими двумя подписями методметод, возвращающий <T расширяет BaseClass> & BaseClass

  1. public <T extends BaseClass> T myMethod(String p1, String p2) {}

  2. public BaseClass myMethod(String p1, String p2) {}

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

Хорошо, что я знаю дженерики, причина, по которой я задал этот вопрос, заключается в том, что оба метода могут вернуть расширение базового слоя, и я наткнулся на кусок кода, который использовал версию generics, я пытался понять, почему?

+0

Вам нужно узнать о дженериках. – SLaks

+0

причина для downvote? – RegisteredUser

+0

Прочтите java-учебник по дженерикам. –

ответ

6

Подпись под номером 1. спасет вас от понижающего значения возвращаемого метода в конкретный подкласс BaseClass. Однако он по своей сути является небезопасным по типу, потому что T выведен только из типа выражения, которое вызывает этот метод. Другими словами, T - это «то, что вы хотите, чтобы оно было», что явно не может работать, поскольку метод возвращает объект определенного типа.

Если вы имели T -typed аргумента к методу, или T был вовлечен в качестве параметра типа такого аргумента, то эта подпись будет иметь смысл; таким образом это делает очень мало.

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