如何使用接口作为地图的密钥

Mar*_*the 3 java generics dictionary interface

我正在寻找有关如何使用接口作为地图密钥的主题的帮助.我试图实现一个解决方案,并且在运行我的集成测试时不会遇到编译时错误但会出现运行时错误.是否不能将接口用作密钥,或者我的测试是否存在问题?

我的代码看起来像这样

private Map<AInterface, Values> myMap = new HashMap<AInterface, Values>();
Run Code Online (Sandbox Code Playgroud)

在从myMap中检索该组键时,它们确实包含具有预期Id的对象,但是被比较为不相等.因此,当使用myMap.get(Object key)时,我得到null,尽管有一个具有相同id的对象.当使用具体类而不是接口时,所有测试都通过:

private Map<AClass, Values> myMap = new HashMap<AClass, Values>();
Run Code Online (Sandbox Code Playgroud)

我读过Generics,它指出对于Map,你需要用Object的子类型的具体类型替换类型变量K和V.

由于编译器在使用Interface for K时没有给我任何警告,我的猜测是测试有错误.

有没有人有使用Interfaces作为地图中的键的经验?我可以给我任何关于我做错的提示吗?

pmf*_*pmf 5

你的课程必须实现hashCodeequals(解释 ;你也应该熟悉Map-interface合同).