Java 8下界通配符

Java 8下界通配符,java,generics,java-8,Java,Generics,Java 8,我正在准备OCP证书,我突然想到了一个下限通配符。如果我理解正确,当我们想让Java知道“有界类型”总是可以添加到我们的泛型集合中时,就会使用下界通配符 例如: public static void addInteger(List<? super Integer> list, Integer i) { list.add(i); } public static void main(String[] args) { List<Number> list

我正在准备OCP证书,我突然想到了一个下限通配符。如果我理解正确,当我们想让Java知道“有界类型”总是可以添加到我们的泛型集合中时,就会使用下界通配符

例如:

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]

}

publicstaticvoidaddinteger(List
谓词您似乎对
谓词
对象实例(由lambda创建)的类型与引用该对象的
pred
的类型之间的差异感到困惑

  • lambda创建的
    谓词
    实例的类型为
    谓词


  • 对象的引用
    pred
    类型为
    predicate您是否尝试过此代码:
    System.out.println(pred.test(newObject());
    ?这非常有意义。非常感谢!
    public static void main(String[] args)
    {   
        Predicate<? super String> pred = s -> s.startsWith("M"); // still compiles
        System.out.println(pred.test("Mon")); // Output true
    
    }
    
    Predicate<? super String> pred = (Object o) -> o.hashCode() > 0;
    
    Predicate<String> preds = s -> s.startsWith("M");
    Predicate<Object> predo = (Object o) -> o.hashCode() > 0;
    Predicate<? super String> pred = preds;
    pred = predo;