有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

隐藏类型的java泛型类型参数

我创建了接口卡,如下所示

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

then 

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

在带有类型参数的卡片组界面中,我得到警告类型参数隐藏了类型卡。我也可以声明类型T而不是Card,但更合理的是,用于容纳Card对象的组不超过该值

我读了一些老帖子,但没有弄清楚为什么会出现警告,以及究竟有什么实际意义/编译器为什么抱怨


共 (2) 个答案

  1. # 1 楼答案

    Deck<Card>
    

    将单词“Card”指定为Deck类中某个类型的占位符,方法与

    Deck<T>
    

    它只是一个占位符

    如果你不想让一副牌包含除牌以外的任何东西,那么最好的选择就是把牌组中的泛型类型一起去掉

  2. # 2 楼答案

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

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

    如果您不希望该组存储除Card之外的任何东西,那么它就不能证明使用泛型是合理的

    对于第二部分,编译器之所以显示警告,是因为Deck接口只考虑<Card>作为占位符,而不是Card接口。因此,为了明确地告诉您这一点,编译器将显示此警告