包装标准库对象并仅覆盖单个方法的最简单方法是什么?

时间:2013-11-30 11:52:15

标签: java

假设我需要一个行为类似于HashMap的Map对象,但HashMap中的单个方法除外。我真的需要实现Map接口所要求的每一种方法吗?:

public WrappedMap<K, V> implements Map<K, V>{
    public HashMap<K, V> hm;

    public WrappedMap<K, V>(){
        hm = new HashMap<K, V>();
    }

    //implement clear(), containsKey(.) etc.
}

即使我可以使用所需的方法(仅需要从默认行为更改的方法除外)点击hm,但是必须列出每个必需的Map接口方法仍然很费力。

有捷径吗?

3 个答案:

答案 0 :(得分:2)

我想你可以创建扩展HashMap的包装器并覆盖你想要的方法。 这样你就不必实现每个方法

答案 1 :(得分:1)

您可以简单地扩展HashMap类并覆盖您想要添加新逻辑的方法。

您可能有兴趣了解更多关于Inheritance vs. Composition的信息,这可能会为您提供一些提示,说明您是否最好扩展HashMap,或者使用合成权委托给一个 - 具体取决于您的用例

当谈到composotion时,使用普通旧java来简单地覆盖几个方法并没有“简单”的方法。但是,您可以考虑使用Project Lombok。它有一个名为@Delegate的注释,它正是这样做的。您可以在Lombok Documentation

中找到更多信息

答案 2 :(得分:1)

你可以

  • 扩展已存在的类java.util.HashMap
  • 扩展一个简单的抽象类,如java.util.AbstractMap,并实现缺少的方法
  • 使用包装原始类的java.lang.reflect.Proxy。