java泛型之二——方法泛型

来源:互联网 发布:邯郸软件开发公司 编辑:程序博客网 时间:2024/05/17 17:44
 
/***一、下面几个类和接口的关系是为了后面的Demo1类示例作准备  **/interface inf1 {}interface inf2 {}class Animal {}class Person extends Animal {}class Girl extends Person {}class GoodGirl extends Girl {}class Man extends Person implements inf1, inf2 {}/** * 二、方法泛型的示例 * E:任意类或接口 */public class Demo1<E> { /** T:E类或E的子类,E接口或E接口实现类 */public <T extends E> T fun1(T t) {return t;} /***  T: 任意类或接口 */public <T> T fun2(T t) {return t;} /***T: Animal类(及其子类)并且必须是inf1接口(及其实现类)*/ /***K: inf2接口(及其实现类) */public <T extends Animal,inf1, K extends inf2> void show(T t, K k) {System.out.println(t+":"+k);}public String getMiddle(String[] a) {System.out.println("no");return "no";} /***T:任意类或接口*/public <T> T getMiddle(T[] a) {System.out.println("yes");return a[a.length/2];} /***调用函数时可以带泛型,也可以不带*/public static void main(String[] args) { /***E:Person */Demo1<Person> d = new Demo1<Person>(); /***fun1中的T: Person或Person的子类,所以fun1中的参数必须是Person或Person的子类对象*/d.fun1(new GoodGirl()); /***调用fun1时使用了泛型Person(必须是E类或E类的的实现类,
                     而前面Demo1<Person>规定了E为Person,所以这里可以指定Person类) */d.<Person>fun1(new Girl());/**参数可以是Person及其子类对象*/ /***调用fun1时使用了泛型Girl(必须是E类或E类的的实现类,
                     而前面Demo1<Person>规定了E为Person,所以这里可以指定Girl类) */d.<Girl>fun1(new Girl());/**参数可以是Girl及其子类的对象*/String[] names = {"1","2","3"}; /***没有使用泛型调用,调用到public String getMiddle(String[] a)*/d.getMiddle(names); /***使用了泛型调用,调用到public <T> T getMiddle(T[] a),*/d.<String>getMiddle(names);}}