我正在使用以下代码创建一个LinkedHashMap -
private final Map<Long, DD> cachedPlansById=new LinkedHashMap<Long, DD>();
cachedPlansById instanceof 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");
}
}
}发布于 2014-09-11 18:20:25
在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);发布于 2014-09-11 18:19:06
但这段代码返回两个true。
由于子对象实际上是父类的实例,所以很明显,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");
}发布于 2014-09-11 19:20:50
问题是我在调试时使用热部署将对象类型从HashMap更改为LinkedHashMap。一旦我在重新构建之后运行相同的代码,我就得到了正确的行为。谢谢你的回答。原版-
private final Map<Long, DD> cachedPlansById = new HashMap<Long, DD>();新-
private final Map<Long, DD> cachedPlansById = new LinkedHashMap<Long, DD>();https://stackoverflow.com/questions/25794381
复制相似问题