java – “伪typedef反模式”是否有理由?

我有一个相对复杂的通用类型(例如Map< Long,Map< Integer,String>),它在类中内部使用. (没有外部可见性,它只是一个实现细节.)我想将它隐藏在typedef中,但 Java没有这样的功能.

昨天我重新发现了以下成语,并很失望地得知这是considered an anti-pattern .

class MyClass
{
  /* "Pseudo typedef" */
  private static class FooBarMap extends HashMap<Long,Map<Integer,String>> { };

  FooBarMap[] maps;

  public FooBarMap getMapForType(int type)
  {
    // Actual code might be more complicated than this
    return maps[type];
  }

  public String getDescription(int type,long fooId,int barId)
  {
    FooBarMap map = getMapForType(type);
    return map.get(fooId).get(barId);
  }

  /* rest of code */

}

当类型被隐藏并且不构成库API的一部分(在我看来,Goetz主要反对使用它)的时候,这样做有什么理由吗?

解决方法

真正的问题是,这个成语在你的伪typedef和你的客户端代码之间建立了很高的耦合.但是,由于您私有使用FooBarMap,所以没有真正的耦合问题(它们是实现细节).

NB

现代Java IDE应该有助于处理复杂的通用类型.

相关文章

Java中的String是不可变对象 在面向对象及函数编程语言中,不...
String, StringBuffer 和 StringBuilder 可变性 String不可变...
序列化:把对象转换为字节序列的过程称为对象的序列化. 反序...
先说结论,是对象!可以继续往下看 数组是不是对象 什么是对...
为什么浮点数 float 或 double 运算的时候会有精度丢失的风险...
面试题引入 这里引申出一个经典问题,看下面代码 Integer a ...