泛型类型参数隐藏类型

时间:2016-04-24 09:47:56

标签: java generics

我按如下方式创建了接口卡

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

then 

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

在带有类型参数的Deck界面中,我收到警告 类型参数隐藏了类型卡 。我也可以声明类型T而不是卡片,但更有意义的是,持有卡片对象的卡片不会超过它。

我阅读了一些旧帖子,但没有清楚地了解为什么警告以及编译器抱怨的具体实际意义和原因。

2 个答案:

答案 0 :(得分:3)

Deck<Card>

指定单词&#34; Card&#34;作为Deck类中类型的占位符,与

相同
Deck<T>

确实:它只是一个占位符。

如果您从不打算使用卡片以外的其他任何卡片,那么您最好的选择就是一起去掉Deck中的泛型类型。

答案 1 :(得分:0)

泛型意味着您需要一个可以根据特定实例所需的特定类型使用不同数据类型的类。例如,考虑这些列表:第一个列表可以包含整数,第二个列表可以包含字符串,并且可以提供所有操作,而不管特定实例中使用的数据类型。

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

如果你不希望牌组存储除Card以外的任何东西,那么它不能证明使用泛型。

对于第二部分,为什么编译器显示警告是因为Deck接口只是将<Card>视为占位符而不是Card接口。因此,要明确地告诉您,编译器正在显示此警告。