【问题标题】:Java: Instantiate Google Collection's HashBiMapJava:实例化 Google Collection 的 HashBiMap
【发布时间】:2009-10-07 18:58:33
【问题描述】:

我正在使用 Eclipse,并且已将 google-collect.1.0-rc2.jar 添加为引用库。然而不知何故,这仍然行不通:

import com.google.common.collect.HashBiMap;

public class Odp {        
    //...
    
    HashBiMap<Character, Integer> charOcc =
        HashBiMap<Character, Integer>.create();    
}

Eclipse 给出以下错误:

这一行有多个标记

  • HashBiMap 无法解析
  • Character.Integer 无法解析
  • 标记“,”,“。”的语法错误预计
  • 标记“.”的语法错误,删除此标记
  • 类 Odp 的 create() 方法未定义

我做错了什么?

其他 Google 产品(例如 Joiner)也可以正常工作。 (但 Joiner 不是通用的。)

【问题讨论】:

    标签: java guava bimap


    【解决方案1】:

    调用静态泛型函数时,不传递类型参数:

     HashBiMap<Character, Integer> charOcc = HashBiMap.create();
    

    实际上你不应该为实现类编写代码,所以你最好这样做

     Map<Character, Integer> charOcc = HashBiMap.create();
    

     BiMap<Character, Integer> charOcc = HashBiMap.create();
    

    【讨论】:

    • 你能解释一下你关于“你不应该为实现类编写代码”的观点吗?
    • 很可能,您的其余代码只关心您使用的是 Map/BiMap(它们都是接口),而不是您专门使用 HashBiMap vs TreeBiMap(不确定这是否存在) 或其他一些 BiMap 实现。通过对接口而不是实现进行编码,如果你想换出你使用的底层实现(假设你决定应该使用 TreeMap 而不是 HashMap,因为你想要排序),那么你只需要在极少数地方发生了变化。
    • 顺便说一句,如果您只是在类型参数之前移动点,您的原始代码也可以工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-10
    • 1970-01-01
    相关资源
    最近更新 更多