Google Guava BiMap - 反向获取方法不起作用

Google Guava BiMap - inversed get-Method doesn't work

我真的不喜欢在这里问,但这次我搜索了,我阅读了文档,我在其他地方寻求帮助,显然没有人知道如何解决我的问题。

我将 google Guava 中的 BiMap 用于我的 java 应用程序,因为我有一种情况需要特定值的键(键和值都是独特)。在非反转视图中,键是 long,值是自己的 class(它还实现了 hashCodeequals)。

现在,我有一个特定的条目,我只知道它的值(但是,我知道这个条目存在,我做了一些检查,您也可以在下面看到)。但是如果我反转映射并使用已知值作为键,则返回的值始终是 null。为了确保问题出在这个特定点,我硬编码了一些调试行:https://hastebin.com/gisojogune.cs (不幸的是,我无法将其粘贴到其他地方,因为我使用的是移动 atm)

如果有人能帮助我,我会很高兴,因为我必须在明天之前完成它。耶。

谢谢, 强尼

编辑:在 link 中,另一个 Map 应该被称为 requests。别介意。

从您提供的稀缺信息来看,很难提供帮助,但这一行是可疑的:

var link = requests.get(aLong); // this should be the same instance that is assigned to the key 458653247347884035L

如果 aLong458653247347884035L 不同(但我不确定这是否是您的意思),那么 不可能1 表示 BiMap 包含两个相同的 Link,但密钥不同。如果那是你的意思,那么你的 hashCode/equals 逻辑可能有问题。


1 作为证明,尝试 运行 这个小片段:

String link = "same-instance";
BiMap<Long, String> requesters = HashBiMap.create();
requesters.put(1L, link);
requesters.put(2L, link);

您将得到以下异常:

java.lang.IllegalArgumentException: value already present: same-instance