Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 包装标准库对象并仅重写单个方法的最简单方法是什么?_Java - Fatal编程技术网

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

Java 包装标准库对象并仅重写单个方法的最简单方法是什么?,java,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>(); } //

假设我需要一个行为类似于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.
}
public WrappedMap实现映射{
公共哈希映射;
公共包装图(){
hm=新的HashMap();
}
//实现clear()、containsKey(.)等。
}
尽管我可以简单地用所需的方法点击
hm
(除了需要从默认行为更改的一个方法),但要列出每个所需的映射接口方法仍然很困难


有捷径吗

您只需扩展HashMap类并覆盖要添加新逻辑的方法

您可能有兴趣了解更多关于HashMap的信息,这可能会给您一些提示,告诉您是否最好扩展HashMap,或者使用composition来委托给HashMap,这取决于您的用例


当涉及到组件时,没有“简单”的方法使用普通的旧java来简单地覆盖几个方法。但是,您可以考虑使用龙目岛Project。它有一个名为
@Delegate
的注释,正是这样做的。您可以在中找到更多信息。

您只需扩展HashMap类并覆盖要添加新逻辑的方法

您可能有兴趣了解更多关于HashMap的信息,这可能会给您一些提示,告诉您是否最好扩展HashMap,或者使用composition来委托给HashMap,这取决于您的用例


当涉及到组件时,没有“简单”的方法使用普通的旧java来简单地覆盖几个方法。但是,您可以考虑使用龙目岛Project。它有一个名为
@Delegate
的注释,正是这样做的。您可以在中找到更多信息。

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

您可以

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

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

      为什么不扩展
      HashMap
      并重写所需的方法?为什么不使用子类化?为什么不扩展
      HashMap
      并重写所需的方法?为什么不使用子类化?可以,但继承往往会导致微妙的问题,比组合方法更难测试。可以,但是继承通常会导致一些微妙的问题,并且比组合方法更难测试。