Если метод возвращает класс или класс <?>?
Руководства Java для использования подстановочных знаков:
Использование шаблона в качестве возвращаемого типа следует избегать, поскольку он заставляет программистов использовать код для борьбы с подстановочными знаками.
Метод Object
getClass
возвращает a Class<?>
. Различные методы в Class
принимают a Class<?>
, и если вы передаете в Class
, компилятор возвращает непроверенное предупреждение. Это заставляет меня думать, что всегда использовать Class<?>
предпочтительнее.
Если у меня есть метод, который возвращает Class
, и я не знаю, как этот объект будет использоваться, какой тип должен возвращать Class
или Class<?>
? Зачем? Существуют ли какие-либо сценарии, в которых я мог бы просто вернуться Class
?
Ответы
Ответ 1
Использование MyType<?>
всегда предпочтительнее использования raw MyType
(и это продолжается до Class
). В руководящих принципах указано, что новый код не будет использовать необработанные типы, которые поддерживаются только для обратной совместимости. Они не предлагают отказаться от дженериков, когда ?
- лучшее, что вы можете сделать.
С помощью параметра подстановочного знака все еще сохраняются гарантии безопасности типа обобщенного типа. Эти гарантии существуют только при отсутствии бросков и сырых типов.
Ответ 2
Если вы хотите вернуть тип, который является общим, то использование подстановочного знака, безусловно, предпочтительнее использования необработанного типа - если вы начнете использовать необработанные типы в своем коде, тогда это эффективно отключит все проверки безопасности другого типа, которые вы получите от используя дженерики должным образом.
В руководстве указывается, что следует избегать подстановочных знаков, а не использовать их. Вы должны использовать наиболее специфический тип, который имеет смысл в данном сценарии, который может быть конкретным экземпляром параметров типа, ограниченным шаблоном extends
или super
или неограниченным шаблоном, но любой из них - лучший выбор чем сырой тип.