2016-04-24 97 views
0

我創建的接口卡與類型參數我得到警告類型參數隱藏式卡如下泛型類型參數隱藏式

public interface Card extends Comparable<Card> { 
    ..... 
    } 

then 

    public interface Deck<Card> { 
      public void add(Card card); 
    } 

在甲板接口。我也可以聲明類型T而不是卡片,但更有意義的是,卡片持有的卡片對象不超過這個。

我看了一些舊帖子,但沒有清楚地知道爲什麼警告以及編譯器爲什麼抱怨實際意義。

+0

我通常在類似的場景中使用'TCard'命名。我擔心這個問題只有基於意見的答案。 –

+0

嘗試公共接口甲板(但是,這不是正確的方式來做到這一點,你不需要甲板是一個通用的接口) – user2717954

回答

3
Deck<Card> 

指定單詞「卡」作爲甲板類中的一個類型的佔位符,同樣的方式,

Deck<T> 

的作用:它只是一個佔位符。

如果你從來不打算用卡組以外的其他東西,你最好的選擇是一起擺脫Deck中的泛型。

0

泛型意味着您需要一個可以根據特定實例的特定類型使用不同數據類型的類。例如,考慮這些列表:第一個列表可以包含整數,第二個列表可以包含字符串,並且可以提供所有操作,而不考慮特定實例中使用的數據類型。

List<Integer> list1 = new ArrayList<>(); List<String> list1 = new ArrayList<>();

如果你不想在甲板上存儲比Card其他任何東西那麼沒有理由對仿製藥的使用。

對於第二部分,爲什麼編譯器顯示警告是因爲Deck接口只是將<Card>作爲佔位符而不是Card接口。因此要明確地告訴你這個編譯器正在顯示這個警告。