簡體   English   中英

Java繼承和泛型,如何聲明一個適用於“多種類型”繼承的函數?

[英]Java Inheritance and generics, how to declare a function that applies to “multiple types” of 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>)但它不起作用:

printMap(Map<Object,Horse>)類型中的方法printMap(Map<Object,Horse>)不適用於參數( HyperMap<Pegasus,Horse>

printMap(Map<Object,String>)類型中的方法printMap(Map<Object,String>)不適用於參數( SuperMap<Unicorn,Horse>

printMap(Map<?, Horse>)

或者,或者

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM