Arhn - архитектура программирования

приведение HashMap полезным способом

В чем [практическая] разница между кастингом в строке 1 и строке 2 здесь, учитывая Java 6:

if (obj instanceof HashMap) {
    HashMap meta = (HashMap) obj; // line 1, raw-type warnings
    // vs
    HashMap<?, ?> meta = (HashMap<?, ?>) obj; // line 2, no warnings
    // ..
}

Почему кто-то должен использовать строку 2 (без предупреждений, типобезопасность), но кажется, что приведенную карту нельзя использовать осмысленно (например, put()/get())?

05.12.2013


Ответы:


1

HashMap = HashMap<Object, Object> != HashMap<?, ?>

HashMap<?, ?> m1 = new HashMap<Object, Object>();
m1.put("foo", "bar");    // ERROR!!

HashMap<Object, Object> m2 = new HashMap<Object, Object>();
m2.put("foo", "bar");    // OK

HashMap m3 = new HashMap<Object, Object>();
m3.put("foo", "bar");   // WARNING (should be parameterized)

если вы собираетесь использовать только HashMap.get(), "практической" разницы не будет.

05.12.2013
  • +1, но немного больше описания ПРЕДУПРЕЖДЕНИЯ всегда полезно :) 05.12.2013
  • да, компилятор будет следить за тем, чтобы никто случайно не вставил Map‹?,?›, похоже, хорошая причина использовать подстановочные знаки, чтобы обеспечить доступ только для чтения к карте. +1 и принято. 05.12.2013

  • 2

    HashMap и HashMap<k,V>.

    Первый HashMap является общим, а второй - специфичным для типа (ключ и значение). В первый HashMap вы можете поместить любой общий объект, а второй - специфичный для типа.

    05.12.2013

    3

    HashMap, выходящий из второй строки, (почти) доступен только для чтения, вы не можете ничего добавить к нему из-за подстановочного знака. В первую можно добавить all, т.к. она переводится компилятором как:

    HashMap<Object, Object> map: 
    
    05.12.2013
    Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..