当前位置: 首页 > 知识库问答 >
问题:

Java 8下界通配符

党星鹏
2023-03-14
public static void addInteger(List<? super Integer> list, Integer i)
{
    list.add(i);
}


public static void main(String[] args)
{   
    List<Number> list = new ArrayList<>();
    addInteger(list, 100);
    addInteger(list, 200);
    System.out.println(list);       // [100,200]

}
public static void main(String[] args)
{   
    Predicate<? super String> pred = s -> s.startsWith("M"); // still compiles
    System.out.println(pred.test("Mon")); // Output true

}

为什么会出现这种情况?请跟我解释一下。

共有2个答案

闻人冷勋
2023-03-14
热门标签
闾丘鸣
2023-03-14
相关问题
 类似资料:
  • 现在我正在尝试构建一个(灵活的)列表,并向其中添加不同类型的对象。 我可以将的实例添加到。但是,当我试图将或的实例添加到同一个列表中时,会出现编译错误。是否足够灵活,可以使用或其超级类的任何实例?和在层次结构树中位于较高位置。为什么我不能将这些实例添加到列表中?

  • null 为什么我不能在MyList中添加对象。因为如果我们使用super,这意味着这个列表可以包含在Java类的继承制度中等于或高于number的对象。因此应该按照该语句在列表中添加新的Object()。 多谢了。

  • 上限通配符下限通配符 有人能帮我理解一下吗?

  • 这个问题的答案表明,当方法采用通配符泛型类型时,可以访问或修改集合,但不能同时访问或修改集合。(凯西和伯特) 据我所知,方法do1有,因此d2只能被访问,不能被修改。方法d2具有,因此可以访问和修改c2,并且没有编译错误。 通用指南

  • 考虑以下示例: 我知道下界通配符接受通配符中给定类的所有超类(这里是IOException)。 为什么在上述情况下编译器会显示编译错误?

  • 问题内容: 您好直接从Oracle http://docs.oracle.com/javase/tutorial/collections/interfaces/collection.html提供的Java教程中 我知道编译时的类型擦除。而且我也知道,一个类型(无界)将被Object取代。知道在编译时如何使用无界通配符进行编译吗?只是删除它,因为它是原始类型? 提前致谢。 问题答案: 假设我们有一个