gpt4 book ai didi

java - Java 继承的问题

转载 作者:行者123 更新时间:2023-11-29 05:17:09 27 4
gpt4 key购买 nike

我有一个抽象的 java 类,如下所示:

public abstract class X  {
public abstract void commonFunction();
}

我也有一堆 map ,我想是这样的:

Map<String,A> mapA = new HashMap<String,A>();
Map<String,B> mapB = new HashMap<String,B>();
Map<String,C> mapC = new HashMap<String,C>();
Map<String,D> mapD = new HashMap<String,D>();
Map<String,E> mapE = new HashMap<String,E>();

A、B、C、D 和 E 都扩展了 X,所以它们都实现了 commonFunction() .
我希望能够调用这样的函数:

someFunction(mapA); // or someFunction(mapB) etc.

...其中 someFunction 看起来像:

void someFunction(Map<String,X> mapX) {
...some stuff
x.commonFunction();
...more stuff
}

但是编译器提示我尝试过的事情,其中​​包括:

  • 通过用 X 替换 [ABCDE] 来更改 map 声明(左侧)
  • 将 map 转换到Map<String,X>someFunction里面函数调用

还尝试使用已实现的接口(interface)而不是扩展类。不确定我做错了什么。

编辑:
对不起,我仓促提问,所以我犯了一个错误。我的 map 实际上是:

Map<String,List<A>> mapA = new HashMap<String,List<A>>();

...等等 someFunction签名实际上是:

void someFunction(Map<String,List<X>> mapX) 

我不确定这是否有很大的不同。

最佳答案

尝试声明

<T extends X> void someFunction(Map<String,List<T>> mapX)

甚至A作为 X 的子类, Map<String,List<A>> 不是 Map<String,List<X>> 的子类.

您需要使用 generic method如上所述有一个接受任何Map<String, List<any class that extends X>>的参数(“任何扩展 X 的类”都由类型参数 T 表示)。

关于java - Java 继承的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26127020/

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