代码之家  ›  专栏  ›  技术社区  ›  Tom

Java中的泛型

  •  10
  • Tom  · 技术社区  · 16 年前

    是否有任何简单的定义和使用通用定义的方法,而不必不断重复特定的通用描述,以便在发生更改时,我不必更改所有定义/用法,但代码库可能是这样的:

    Typedef myGenDef = < Object1, Object2 >;
    
    HashMap< myGenDef > hm = new HashMap< myGenDef >();
    
    for (Entry< myGenDef > ent : hm..entrySet())
    {
    .
    .
    .
    }
    
    5 回复  |  直到 6 年前
        1
  •  11
  •   Anshu    13 年前

    这里有 pseudo-typedef antipattern

    class StringList extends ArrayList<String> { }
    

    好东西,喝吧!;-)

    正如本文所指出的,这种技术有一些严重的问题,主要是这个“typedef”实际上是一个单独的类,因此不能与它扩展的类型或其他类似定义的类型互换使用。

        2
  •  4
  •   Sébastien RoccaSerra    16 年前

    在通用方法中,可以使用有限形式的类型推断来避免重复。

    示例:如果您具有

        <K, V> Map<K, V> getSomething() {
            //...
        }
    

    你可以使用:

    final Map<String, Object> something = getsomething();
    

    而不是:

    final Map<String, Object> something = this.<String, Object>getsomething();
    
        3
  •  3
  •   zaca    16 年前

    使用 Factory Pattern 创建仿制药:

    方法样本:

    public Map<String, Integer> createGenMap(){
            return new HashMap<String,Integer>();
    
        }
    
        4
  •  2
  •   Marcio Aguiar    16 年前

    shog9提到的伪typedef反模式可以工作——尽管不建议使用反模式——但它不能解决您的意图。伪typedef的目标是减少声明中的混乱,提高可读性。

    你想要的是能够用一个交易替换一组泛型声明。我想你必须停下来想:“在巫术中,它有价值吗?”我是说,我想不出你会需要这个的场景。想象一下A级:

    class A {
         private Map<String, Integer> values = new HashMap<String, Integer>();
    }
    

    现在假设我想将“值”字段更改为映射。为什么会有许多其他字段分散在需要相同更改的代码中?对于使用“值”的操作,简单的重构就足够了。

        5
  •  1
  •   Aaron Maenpaa    16 年前

    不需要。不过,一种JVM语言groovy是动态类型的,允许您编写:

    def map = new HashMap<complicated generic expression>();