gpt4 book ai didi

Java泛型如何避免接口(interface)不能用不同的参数实现多次

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:01:43 26 4
gpt4 key购买 nike

这是场景。

我们的应用程序有一个非常简单的缓存实现接口(interface),其方法类似于 Map:

public interface ICache<K, V> {

为了添加一个具体的缓存实现,我们实现了接口(interface)并包装了一个缓存框架,如 EHCache、Redis、memcached 等。示例(这里的 EHCache 对问题无关紧要):

public abstract class EHCacheWrapper<K,V> implements ICache<K, V> {

接下来我们有一个名为 AuthenticationCache 的 EHCacheWrapper 实现:

public class AuthenticationCache 
extends EHCacheWrapper<AuthenticationCacheKey, AuthenticationCacheEntry> {

到目前为止一切顺利。

AuthenticationCache 对象除了 EHCacheWrapper 或 ICache 之外还有一些额外的方法。我们要添加的是 AuthenticationCache、AuthenticationCacheKey 和 AuthenticationCacheEntry 的接口(interface):

public interface IAuthenticationCacheKey extends Serializable {
public interface IAuthenticationCacheEntry extends Serializable {
public interface IAuthenticationCache extends ICache<IAuthenticationCacheKey,IAuthenticationCacheEntry>{

现在我们有:

public class AuthenticationCache 
extends EHCacheWrapper<AuthenticationCacheKey, AuthenticationCacheEntry>
implements IAuthenticationCache {

编译器错误:

The interface ICache cannot be implemented more than once with different arguments: ICache<AuthenticationCacheKey,AuthenticationCacheEntry> and ICache<IAuthenticationCacheKey,IAuthenticationCacheEntry>

我如何实现我们在这里的目标?

最佳答案

由于 Type Erasure,泛型在运行时不再可用无法区分 ICache<K, V> 的两个实现.您需要重新考虑接口(interface)和类层次结构的设计。 IAuthenticationCache真的有必要吗?延伸ICache

public interface IAuthenticationCache
//extends ICache<IAuthenticationCacheKey,IAuthenticationCacheEntry>
{ ... }

关于Java泛型如何避免接口(interface)不能用不同的参数实现多次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50182520/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com