我想定义一个与java.util.Map具有相同接口的ADT。 但是我读到这是一个反模式,使MyType扩展Map如下所述: Is there a Java equivalent or methodology for the typedef keyword in C++?
由于在Java中没有等效的C / C ++ typedef,因此无法定义真正的类型同义词。
我正在考虑这两个解决方案:
为java.util.Map定义一个具体的包装器/转发类,但这会迫使我针对类进行编码而不是对接口进行编码。我正在看Guava的ForwardingMap,但这是一个类而不是界面。
定义我自己的模仿java.util.Map的接口和一个包装java.util.Map的实现。我不喜欢这种重复,但我没有看到任何解决方法,这使我能够对接口和表示独立性进行编程。
写public interface MyType<K,V> extends Map<K,V>
之类的内容然后:
public class MyTypeImpl<K, V> extends ForwardingMap<K, V> implements MyType<K, V> {
final Map<K, V> delegate;
public MyTypeImpl() {
this(new HashMap<K, V>());
}
public MyTypeImpl(Map<K, V> delegate) {
this.delegate = delegate;
}
@Override
protected Map<K, V> delegate() {
return delegate;
}
}