我想实现一个简单的Cache接口:
public interface Cache {
Object get(Object key);
Object put(Object key, Object value);
void clear();
}
Run Code Online (Sandbox Code Playgroud)
我意识到它是java.util.Map接口的一部分.因此,像HashMap这样的对象应该能够传递给需要Cache对象的函数.
但另一方面,我不想让我自己的Cache类实现整个Map接口,因为除了这三个之外我不需要其他方法.
Java不是一种鸭式语言,那么在这种情况下最好的做法是什么?
java中没有这样的功能。
我认为你能做的最好的事情就是创建你所关心的 HashMap 的包装器。
接口是一个契约。实现的类应该通过实现虚拟/抽象方法来履行契约。
您CacheImpl只需通过接口履行合同即可Cache。同时HashMap只履行与接口的契约Map。
和接口共享具有相同签名的方法Cache,Map但它们需要不同的契约/实现。
您确实无法确定一个接口包含的方法是否Object put(Object key, Object value);与您的接口兼容Cache,因为您不了解该接口提供了哪些合同。
因此,在 Java 中,除非它们提供语义来创建现有接口的“父”接口,否则您不能这样做。