instanceof LinkedHashMap

时间:2014-09-11 18:12:26

标签: java collections hashmap linkedhashmap

我使用以下代码创建LinkedHashMap -

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

cachedPlansById instanceof LinkedHashMap

但是我得到了一个真实的&#39;在实例的HashMap和一个&#39; false&#39;在LinkedHashMap的实例上。 你能否建议如何确保它对于LinkedHashMap的实例是真的?

我无法将其声明为LinkedHashMap,这会破坏代码。

当我编写一个新的测试类时,上面的代码是有效的。不确定原始类中的问题是什么,因为甚至没有任何导入HashMap和cachedPlansById只被实例化一次,因此不确定它是如何被遮蔽的。 这是测试类 -

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");
        }
    }
}

3 个答案:

答案 0 :(得分:2)

在JUnit测试中运行此代码并通过,因此它们都返回true。

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 :(得分:1)

但是这段代码同时返回true

由于child实际上是Parent的一个实例,所以很明显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");
}

答案 2 :(得分:0)

问题是我在调试时使用热部署将对象类型从HashMap更改为LinkedHashMap。一旦我再次构建后运行相同的代码,我得到了正确的行为。谢谢你的回答。 原 -

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

新 -

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