我正在学习Java泛型。我的理解是泛型按类型参数化Collections。在Oracle教程中,有以下注释:
在通用代码中,称为通配符的问号(?)表示未知类型。
在下一页上,有以下方法声明的示例,在参数中带有上限通配符:
public void process(List<? extends Foo> list)
鉴于此,我想知道为什么此方法声明是非法的:
public void process(List<E extends Number> list)
虽然这是合法的:
public <E extends Number> void process(List<E> list)
在指定方法parm类型时,您使用的是泛型类型,因此必须预先定义。在此语句中,您使用E且未定义
public void process(List<E extends Number> list) { /* ... */ }
但是,在第二种方法中,它是在方法返回类型(void)之前定义的:
public <E extends Number> void process(List<E> list) { /* ... */ }
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句