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