我使用以下代码创建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");
}
}
}
答案 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>();