Java 包装标准库对象并仅重写单个方法的最简单方法是什么?
假设我需要一个行为类似于HashMap的Map对象,除了HashMap中的一个方法之外。我真的需要实现Map接口要求的每一种方法吗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>(); } //
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
并重写所需的方法?为什么不使用子类化?可以,但继承往往会导致微妙的问题,比组合方法更难测试。可以,但是继承通常会导致一些微妙的问题,并且比组合方法更难测试。