据我所知,使用上限泛型和使用超类作为方法参数都接受相同的可能参数。哪个是首选,两者之间有什么区别(如果有)?
上限泛型作为参数:
public <T extends Foo> void doSomething(T foo) {}
超类作为参数:
public void doSomething(Foo foo) {}
这是一个上限类型参数。下限是使用创建的super
,您实际上无法对类型参数执行此操作。不能有下界类型参数.
例如,如果您想通过List<T>
。因此,对于以下两种方法:
public <T extends Foo> void doSomething(List<T> foos) {}
public void doSomething(List<Foo> foo) {}
对于给定的类:
class Bar extends Foo { }
方法调用如下:
List<Bar> list = new ArrayList<Bar>();
doSomething(list);
对第一种方法有效,但对第二种方法无效。第二种方法失败,因为List<Foo>
不是一个超类型List<Bar>
, 虽然Foo
是超类型的Bar
。但是,第一个方法通过了,因为有类型参数T
将被推断为Bar
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)