2014-09-11 3 views
1

Я создаю LinkedHashMap используя следующие код-InstanceOf LinkedHashMap

private final Map<Long, DD> cachedPlansById=new LinkedHashMap<Long, DD>(); 

cachedPlansById instanceof LinkedHashMap 

Но я получаю «истина» на InstanceOf HashMap и «ложь» на InstanceOf LinkedHashMap. Можете ли вы предложить, как убедиться, что это верно для instanceof LinkedHashMap?

Я не могу объявить его как LinkedHashMap, что нарушает код.

Это правда, что, когда я пишу новый тестовый класс, приведенный выше код работает. Не уверен, в чем проблема в моем первоначальном классе, так как нет никаких импортных данных в HashMap, а cachedPlansById получает экземпляр только один раз, поэтому не уверен, как он затеняется. Вот тест class-

import java.util.*; 

public class MapTest { 
    public static void main(String[] args) { 
     Map<Long, String> m = new LinkedHashMap<Long, String>(); 
     if (m instanceof LinkedHashMap) { 
      System.out.println("true"); 
      LinkedHashMap<Long, String> l = (LinkedHashMap) m; 
      if (l instanceof LinkedHashMap) 
       System.out.println("true"); 
     } 
    } 
} 
+6

код или не произошло –

+0

Она должна возвращать верно как для –

+0

Он возвращает истинное. Вы уверены, что попробовали? – zerocool

ответ

2

Выполнение этого кода в тесте JUnit и она проходит, так что все они возвращают истинный.

Map<Long, String> map = new LinkedHashMap<Long, String>(); 
assertTrue(LinkedHashMap.class.isAssignableFrom(map.getClass())); 
assertTrue(map instanceof LinkedHashMap); 
assertTrue(HashMap.class.isAssignableFrom(map.getClass())); 
assertTrue(map instanceof HashMap); 
1

Но этот код возвращает оба истинны

Как ребенок на самом деле является экземпляром родителя так, очевидно, LinkedHashMap объект будет экземпляром суперкласса HashMap и во-вторых LinkedHashMap будет, очевидно, экземпляр LinkedHashMap

final Map map = new LinkedHashMap(); 
if(map instanceof LinkedHashMap){ 
    System.out.println("true"); 
} 
if(map instanceof HashMap){ 
    System.out.println("true"); 
} 
0

Проблема заключалась в том, что я изменил тип объекта с HashMap на LinkedHashMap, используя горячее развертывание во время отладки. Когда я снова запустил тот же код после сборки, я получил правильное поведение. Спасибо за ваши ответы.

оригинал-
private final Map<Long, DD> cachedPlansById = new HashMap<Long, DD>(); 

Создать-

private final Map<Long, DD> cachedPlansById = new LinkedHashMap<Long, DD>(); 
Смежные вопросы