gpt4 book ai didi

java - 接口(interface)中的嵌套参数化类型

转载 作者:行者123 更新时间:2023-11-30 10:03:02 25 4
gpt4 key购买 nike

我有以下接口(interface):

缓存键接口(interface):

public interface CacheKey<K extends Serializable> extends Serializable {
K get();
}

缓存值接口(interface):

public interface CacheValue<V extends Serializable> extends Serializable {
V get();
}

缓存接口(interface):

public interface Cache<CacheKey<K extends Serializable>, CacheValue<V extends Serializable>> {
}

缓存接口(interface)不编译。我得到的错误是:[13,35] > 预期

即在 CacheKey 编译器不喜欢另一个左尖括号之后:

public interface Cache<CacheKey<
^

这在 Java 中是不可能的吗?

最佳答案

您在这里错过了一个关键步骤:实现。

通常在实现中你想定义? extends Serializable的类型是什么将。您不需要在 Cache 中实现它界面。

接口(interface)只需要知道它的泛型类型是什么,而不是它们的子代的泛型:这是为了实现。

请看下面的示例,以了解我的确切含义。

添加:当您定义类似 Cache<CacheKey, CacheValue> 的内容时您不是在引用类,而是在创建通用别名。 CacheKey可以很容易地替换为 Blabla并继续有相同的行为。解决方案是使用 extends以确保我们谈论的是类型。

这也是为什么 Cache<CacheKey<...>> 的原因没有编译,因为CacheKey不是指类,而是用作别名

public interface CacheKey<K extends Serializable> extends Serializable {
K get();
}

public interface CacheValue<V extends Serializable> extends Serializable {
V get();
}

public interface Cache<K extends CacheKey<? extends Serializable>, V extends CacheValue<? extends Serializable>> {
void put(K key, V value);
}

public class CacheImpl implements Cache<CacheKey<String>, CacheValue<String>> {
@Override
public void put(CacheKey<String> key, CacheValue<String> value) {
// do whatever
}
}

关于java - 接口(interface)中的嵌套参数化类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56403614/

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