Скажите пожалуйста, чем отличаются два случая:
public class Main {
public static void main(String[] args) {
Class c1 = String.class; // Строка 3
Class c2 = String.class; // Строка 4
System.out.println(c1 +", " + c2);
}
}
В 3-ей и 4-ой строках мы делаем что-то похожее, но компилятор предупреждает, что c1 будет ссылкой на объект сырого типа, а c2 для компилятора -- прекрасная ссылка на прекрасный объект Class
Не понимаю разницы. И сырой тип и параметризованный знаком вопроса одинаково заполнены классом Object во время выполнения. Да и во время компиляции тот и другой обрабатываются по равному...
Возможно это просто философское предупреждение от Java, что сырой тип он сбивает с пути истины, а Class сразу показывает, что программист нацелен пихать в c2 всевозможные классы?
Ответ
Брюс Эккель в "Философия Java" пишет, что использование Class вместо Class предпочтительнее, хотя оба варианта эквивалентны за тем лишь исключением, что при компиляции кода, где используется Class, будет выдаваться предупреждение. Кроме этого Эккель отмечает, что использование Class указывает, что разработчик более осмысленно подошёл к выбору типа, а не используете просто Class по незнанию.
Комментариев нет:
Отправить комментарий