/**
* @author lixueni
* 泛型上限实现
* 1.泛型类的上限
* 2.泛型方法的上限
* 3.参数的泛型上限
*/
class Upper<T extends A>{
//2.(1)未设置上限的泛型方法。
public <D> void print(D d){
System.out.println("我是未设置上限的泛型方法");
}
//2.(2)设置上限的泛型方法。
public <E extends A> E say(E e) {
System.out.println("我是设置上限的泛型方法");
return e;
}
//3.(1)参数的泛型上限(对于本类Upper而言)
public void show(Upper<? extends A> upper) {
System.out.println("我是参数的泛型上限(对于本类Upper而言)");
}
//3.(2)参数的泛型上限(对于不是本类的Name类而言)
public void showInformation(Name<? extends A> name) {
System.out.println("我是参数的泛型上限(对于不是本类的Name类而言)");
}
}
class Name<F>{
}
public class UpperLimitTest {
public static void main(String[] args) {
//创建泛型类上限的对象。
Upper<B> upper = new Upper<B>();
//2.(1)未设置上限的泛型方法。的调用
String string = new String();
upper.print(string);
//2.(2)设置上限的泛型方法。对于E来说其子类及其本身都可以。
upper.say(new B());
//3.(1)参数的泛型上限(对于本类Upper而言)
upper.show(new Upper<C>());
//3.(2)参数的泛型上限(对于不是本类的Name类而言)
upper.showInformation(new Name<A>());
}
}
/**
* @author lixueni
*泛型下限的实现:
*应用在实现参数泛型下限中
*/
class Lower{
public void print(Name<? super C> name) {
System.out.println("实现参数泛型下限");
}
}
public class LowerLimitTest {
public static void main(String[] args) {
Lower lower = new Lower();
lower.print(new Name<C>());
lower.print(new Name<B>());
lower.print(new Name<A>());
}
}