<T extends A>
就是我不知道“T”具体是啥,但是我知道它的父类是A
<? extends A>
和上面一个效果
区别:
<T extends A>
用于声明;<? extends A>
单独使用的使用用
举例:
public class Test<T extends A> {}
这里在类名后直接跟<T extends A>
,
这样在类中,凡是用到“T”的地方,都可以直接用T代表。
public void haha(List<? extends A> strs){}
这里List里面的类型具体是啥不知道,但是知道继承自A
看完例子发现不了区别,别急,上面都说了<T extends A>
用于声明,
我们试试将haha方法放进Test类中,然后将haha方法中<? extends A>
换成<T>
,就像这样:
public class Test<T extends A> {
public void haha(List<T> strs){}
}
发现了吗?其实这就相当于声明了T,只不过声明位置在类上,你不太习惯而已。
一般都是类上使用<T extends A>
,为了声明一个T,在类中使用。
下面多学点。
既然<T extends A>
用于声明 ,那么我就是想在单独方法中声明“T”怎么办?
很简单:
public <T extends A> void haha(List<T> strs){}
还是声明,只不过方法中的声明,是在返回值之前声明,
类中声明是在类名之后。