В чём разница: Class a & Class<?> a?

324
26 сентября 2017, 05:37

Скажите пожалуйста, чем отличаются два случая:

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 всевозможные классы?

Answer 1

Брюс Эккель в "Философия Java" пишет, что использование Class<?> вместо Class предпочтительнее, хотя оба варианта эквивалентны за тем лишь исключением, что при компиляции кода, где используется Class, будет выдаваться предупреждение. Кроме этого Эккель отмечает, что использование Class<?> указывает, что разработчик более осмысленно подошёл к выбору типа, а не используете просто Class по незнанию.

Answer 2

Вы теряете в безопасности типов в случае использования сырого типа, такого как List, но сохраняете ее при использовании параметризованного типа - Effective Java

READ ALSO
Нужный компонент [требует правки]

Нужный компонент [требует правки]

Ищу компонент на подобии такого: http://joxiru/ZrJy93Kh9ONKoA Суть в том, чтобы был параметр и к нему флажок включён\выключен

258
Какая разница между &lt;?&gt; и &lt;? extends Object&gt;?

Какая разница между <?> и <? extends Object>?

Как я понял, вместо подставить можно любой тип (кроме примитивов), зачем тогда есть ?

312
Шифровка строк. Чат

Шифровка строк. Чат

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

301