gpt4 book ai didi

java - 在 Java 中继承泛型接口(interface)

转载 作者:行者123 更新时间:2023-11-29 04:38:21 25 4
gpt4 key购买 nike

我有泛型接口(interface):

public interface Cache<CachePrimaryKey extends Object, RowModel extends CacheRowModel>

我需要创建扩展 Cache 但添加新方法的子接口(interface)同时保留泛型。保留泛型部分的正确语法是什么?

我有类似的实现。

public class InfoCache implements Cache<Long, DataRowModel> 

我试过了

public interface EnrichedCache<CachePrimaryKey extends Object, 
RowModel extends CacheRowModel> extends Cache

但是当我将 InfoCache 类的接口(interface)从 Cache 更改为 EnrichedCache 时,我得到“不覆盖其父类(super class)的方法”。如果我在 IntelliJ 中使用“实现方法”,而不是 Long+DataRowModel 的方法,它会提供 Object 和 CacheRowModel 的方法(这不是我想要的)。

继承接口(interface)并保留所有泛型的正确方法是什么?

最佳答案

首先,我们使用大写字母来表示泛型,这是为了避免下面的废话:

public interface Cache<String> {
String getKey();
}

上面的接口(interface)是做什么的?


因此,将您的接口(interface)重写为:

public interface Cache<K, R extends CacheRowModel>

注意extends Object是废话,我已经去掉了

然后创建一个通用的 interface扩展 Cache 并保持我们会做的相同的泛型:

public interface EnrichedCache<K, R extends CacheRowModel> extends Cache<K,R>

即我们有一个通用的接口(interface),它有参数K(可以是任何东西)和R(必须是CacheRowModel 的子类) >) 使用相同的参数扩展 Cache


您也可以收紧传递的泛型:

public interface NumericCache<K extends Number, R extends CacheRowModel> extends Cache<K,R>

这里我们需要 NumericCache 的 key 来extends Number

您还可以将一个泛型参数设置为具体类型并传递第二个:

public interface StringCache<R extends CacheRowModel> extends Cache<String, R>

这里我们显式地将继承缓存的key设置为String,但允许用户指定CacheRowModel来使用。

关于java - 在 Java 中继承泛型接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40305060/

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