Java继承与泛型,如何声明一个适用于 "multiple types"继承的函数?

标签 java generics inheritance

我找不到适合我想做的事情的问题/标题。我对泛型不是很熟悉,所以我在理解它们的工作原理时遇到了一些问题。

假设我有一个 Map<k,v>将键映射到值的类。

class Map<K,V>{
    public V get(K key){
        //...
    }

    public void set(K key, V v){
        //...
    }
 }

然后,我创建了两个子类:

class SuperMap<K,V> extends Map<K,V>{ /* ... */ }
class HyperMap<K,V> extends Map<K,V>{ /* ... */ }

我想要的是创建一个函数,它可以接受任何映射并打印每个键和值的字符串表示形式。所以我可以:

SuperMap<Unicorn, Horse> unicornsMap = ....;
HyperMap<Pegasus, Horse> pegasusMap = ....;

printMap(unicornsMap);
printMap(pegasusMap);

那么,printMap 应该是什么?函数签名?

我试过:void printMap(Map<Object, Horse>)但它不起作用:

The method printMap(Map<Object,Horse>) in the type MainClass is not applicable for the arguments (HyperMap<Pegasus,Horse>)

The method printMap(Map<Object,String>) in the type MainClass is not applicable for the arguments (SuperMap<Unicorn,Horse>)

最佳答案

printMap(Map<?, Horse>)

或者,交替地

<K> printMap(Map<K, Horse>)

关于Java继承与泛型,如何声明一个适用于 "multiple types"继承的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12981022/

相关文章:

java - 等待写入文件

c# - MEF 通用进口

swift : import UIKit in each subclass?

java - 重复写入 ObjectInputStream

java - 在 Android 中解析复杂的 WCF 响应

java - 一个Java程序,显示5名员工的每周薪水(预期输出错误)

c# - 如何列出实现抽象类和接口(interface)(C#)的东西?

C# 特化泛型类

C# 将泛型子类型转换为父类型

java - Java中静态变量的继承规则是什么?