Java--泛型(方法泛型,接口泛型,泛型高级之通配符)

来源:互联网 发布:魔爪软件下载 编辑:程序博客网 时间:2024/05/23 14:24

//方法泛型

public class Tool<Q>{

private Q q;

public Q getObj(){

return q;

  }

public void setObj(Q q){

this.q=q;

  }

public<T> void show(T t){       //方法泛型最好与类的泛型一致,如果不一致,需要在方法上声明该泛型。

System.out.println(t);     //该程序中,类泛型是Q,方法泛型如果不写的话默认是Q,声明的话可以是别的泛型

  }

public static void print(Q q){}   //会报错,静态方法,不能与类的泛型一致,因为静态方法是在类加载的时候加载,是在创建对象之前创建的,而类泛型是在创建对象的时候才                                                          //能知道具体的类型

public static<W> void print(W w){

System.out.println(w);

//不会报错,方法声明了自己的泛型,就拥有了自己的泛型

 }


//接口泛型

public class Main{

public static void main(String[] args){

 }

 }

interface Inter<T>{

public void show(T,t);

 }


//第一种方式:

class Demo implements Inter<String>{       //实现了这个接口的时候就指定了这个泛型,推荐用这种

@Override

public void show(String t){

System.out.println(t);

 }

 }


//第二种方式:

class Demo<T> implements Integer<T>{    //这种方式不是很推荐,没有必要再实现接口的时候给自己的类加泛型

@Override

public void show(T t){

System.out.println(t);

 }

 }


//泛型高级之通配符

public class Demo_Generic{

/**

         * A:泛型通配符<?>  //相当于斗地主中的癞子,可以替换任意一张牌

*任意类型,如果没有明确,那么就是Object以及任意的JAVA类了

*B:?extends E   向下限定,E及其子类(?是子类,E是父类)

*C:?super E       向上限定,E及其父类

 */

public static void main(String[] args){

List<?> list=new ArrayList<String>();   //当右边的泛型是不确定时,左边的泛型可以指定为?

ArrayList<Person> list1=new ArrayList<>();

list1.add(new Person("张三",23));

list1.add(new Person("李四",24));

list1.add(new Person("王五",25));


ArrayList<Student> list2=new ArrayList<>();

list2.add(new Stuent("赵六",26));

list2.add(new Stuent("周七",27));

//Student类是继承了Person类的

list1.addAll(list2);    //在addAll的API中可以将list1中添加的类型或者list1的类型的子类型,可以将子类对象添加到父类中

System.out.println(list1);

list2.addAll(list1);  //不可以将父类对象添加到子类中




 }

 }


0 0
原创粉丝点击