在Java中何时使用无界通配符
我开始了解无限通配符,但我不明白它在现实世界中的用法。 在下面的程序中,使用和不使用这个无界通配符在编译时是相同的。那么为什么我们需要无界通配符呢?请帮助理解在Java中何时使用无界通配符,java,generics,Java,Generics,我开始了解无限通配符,但我不明白它在现实世界中的用法。 在下面的程序中,使用和不使用这个无界通配符在编译时是相同的。那么为什么我们需要无界通配符呢?请帮助理解 public class UnboundedWildCards { public static void main(String args[]) { List<Integer> intLst = new ArrayList<Integer>(); intLst.add
public class UnboundedWildCards {
public static void main(String args[])
{
List<Integer> intLst = new ArrayList<Integer>();
intLst.add(1);
intLst.add(11);
List<Double> doubleLst = new ArrayList<Double>();
doubleLst.add(1.1);
doubleLst.add(11.11);
List lst = new ArrayList();
lst.add(new Object());
lst.add(new Double(2.3));
lst.add(new Integer(2));
print(intLst);
print(doubleLst);
print(lst);
unBoundprint(intLst);
unBoundprint(doubleLst);
unBoundprint(lst);
}
public static void print(List lst)
{
for(Object o : lst)
System.out.println(o);
}
public static void unBoundprint(List<?> lst)
{
for(Object o : lst)
System.out.println(o);
}
}
公共类无界wildcards{
公共静态void main(字符串参数[])
{
List intLst=new ArrayList();
补充(1);
补充(11);
List doubleLst=new ArrayList();
doubleLst.添加(1.1);
doubleLst.增补(11.11);
List lst=new ArrayList();
添加(新对象());
第一项增加(新的双(2.3));
lst.add(新整数(2));
打印(intLst);
打印(doubleLst);
打印(lst);
未绑定打印(intLst);
未绑定打印(doubleLst);
未绑定打印(lst);
}
公共静态无效打印(列表lst)
{
用于(对象o:lst)
系统输出打印ln(o);
}
公共静态无效未绑定打印(列表lst)
{
用于(对象o:lst)
系统输出打印ln(o);
}
}
有两种情况下,无界通配符是一种有用的方法:
您是在问我们为什么需要符号吗
List<?>
是否等效
使用通配符更显式,但为了向后兼容预泛型代码,需要更简单的语法。因此,您可以互换使用这两种方法中的任何一种,但还有第三种方法声明此列表,这也是等效的
List<? extends Object> list;
List首先,重要的是要理解List和List是不同的。列表不是列表的超类您到底想知道什么。你从那篇文章中感到困惑的是什么?又是一篇好文章。另一种情况:如果您必须使用非通用时间段的代码(例如Java1.4)<代码>列表=oldShittyCode.getList()代码>这一个非常有用
List<? extends Object> list;