Различие между классом и классом <?>

Я не думаю, что у вас есть большой выбор.

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

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

Вы можете попытаться найти способ проверить входные данные в источнике. Почему вы получаете неверные данные? Как ввод может быть недействительным и т. Д.

Примером для вашего класса дат будет принуждение пользователя (пользователя вашей программы) вводить только действительную дату (заставляя его вводить ее в виде календаря). GUI, например).

Вы также можете попытаться создать метод в своем классе для обработки проверки ввода.

При этом пользователь (на этот раз программист) может либо вызвать его до конструирования, и быть уверенным, что вызов не потерпит неудачу, либо откатится на исключение, если пользователь не подтвердил его.

Если производительность важна, и вы не хотите вызывать функцию validate дважды (пользователь вызывает ее, затем в конструкторе), я думаю, вы могли бы использовать именованный конструктор idiom, чтобы иметь CheckedConstructor и UncheckedConstructor.

Это начинает переусердствовать в архитектуре, хотя, я думаю.

В конце концов, это будет зависеть от класса и варианта использования.

41
задан Daniel Rikowski 18 June 2009 в 07:33
поделиться

3 ответа

То же, что и со всеми универсальными и необработанными типами:

Class          // An unknown class (raw type)
Class<?>       // An unknown class (generic version)
Class<String>  // The String class

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

Но: Начиная с Java 1.5 вы должны использовать универсальную форму везде, где это возможно. Class четко указывает, что вы имеете в виду «неизвестный класс», Class ясно заявляет, что вы имеете в виду класс String . Необработанный Класс может означать оба .

41
ответ дан 27 November 2019 в 00:49
поделиться

Class javadoc :

Параметры типа: T - тип класса, моделируемого этим объектом Class . Например, тип String.class - Class . Используйте Class , если моделируемый класс неизвестен.

Использование Class без параметра типа аналогично использованию любого универсального класса ( Map , Список и т. Д.) Без параметра типа - либо это устаревшее использование до 1.5, либо это просто сегмент кода, который не заботится о неконтролируемом приведении типов.

10
ответ дан 27 November 2019 в 00:49
поделиться

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

2
ответ дан 27 November 2019 в 00:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: