Подтвердить что ты не робот

Если метод возвращает класс или класс <?>?

Руководства Java для использования подстановочных знаков:

Использование шаблона в качестве возвращаемого типа следует избегать, поскольку он заставляет программистов использовать код для борьбы с подстановочными знаками.

Метод Object getClass возвращает a Class<?>. Различные методы в Class принимают a Class<?>, и если вы передаете в Class, компилятор возвращает непроверенное предупреждение. Это заставляет меня думать, что всегда использовать Class<?> предпочтительнее.

Если у меня есть метод, который возвращает Class, и я не знаю, как этот объект будет использоваться, какой тип должен возвращать Class или Class<?>? Зачем? Существуют ли какие-либо сценарии, в которых я мог бы просто вернуться Class?

4b9b3361

Ответ 1

Использование MyType<?> всегда предпочтительнее использования raw MyType (и это продолжается до Class). В руководящих принципах указано, что новый код не будет использовать необработанные типы, которые поддерживаются только для обратной совместимости. Они не предлагают отказаться от дженериков, когда ? - лучшее, что вы можете сделать.

С помощью параметра подстановочного знака все еще сохраняются гарантии безопасности типа обобщенного типа. Эти гарантии существуют только при отсутствии бросков и сырых типов.

Ответ 2

Если вы хотите вернуть тип, который является общим, то использование подстановочного знака, безусловно, предпочтительнее использования необработанного типа - если вы начнете использовать необработанные типы в своем коде, тогда это эффективно отключит все проверки безопасности другого типа, которые вы получите от используя дженерики должным образом.

В руководстве указывается, что следует избегать подстановочных знаков, а не использовать их. Вы должны использовать наиболее специфический тип, который имеет смысл в данном сценарии, который может быть конкретным экземпляром параметров типа, ограниченным шаблоном extends или super или неограниченным шаблоном, но любой из них - лучший выбор чем сырой тип.