泛型的基本定义及使用

1、 基本概念:

范例:

class Point<T>{//T的类型未知

  T x;

  T y;

  Point(T x, T y){

          this.x=x;

          this.y=y;

  }

  public void getPoint(){

          System.out.println("x="+x+",y="+y);

  }

}

public class StaticClass{

  public static void main(String[] args){

          Point<Integer> point=new Point<Integer>(1,2);//必须是包装类,不支持基本类型

          point.getPoint();

  }

}

使用泛型之后,所有类中属性都是动态设置的,而所有使用反省标记的方法参数类型也都要发生变化。

 

说明:如果使用泛型类或接口,没有设置泛型具体类型,那么会出现编译时的警告,并且所有泛型使用object表示。

 

从jdk1.7可以简化泛型声明:Point<Integer> point=new Point<Integer>(1,2)

等价于Point<Integer> point=new Point<>(1,2)

 

2、 通配符

?:匹配任意类型

?extends 类:设置泛型上限,可以在声明和方法参数上使用。

        例:? extends:可以设置Number或者Number的子类(Integer,Double.......)

?super 类:设置泛型下限,方法参数上使用。

        例:? extends String :只能设置String或者它的父类Object。

 上限范例:

class Message<T extends Number>{

  private T msg;

  public void setMsg(T msg){

          this.msg=msg;

  }

  public T getMsg(){

          return msg;

  }

}

public class TestDemo{

  public static void main(String[] args){

          Message<Integer> m=new Message<Integer>();

          m.setMsg(100);

          fun(m);

  }

  public static void fun(Message<? extends Number>temp){

          System.out.println(temp.getMsg());

  }

}

以上代码中,如果出现了非Number或其子类,则会出现语法错误。

 

下限范例:

class Message<T>{

  private T msg;

  public void setMsg(T msg){

          this.msg=msg;

  }

  public T getMsg(){

          return msg;

  }

}

public class TestDemo{

  public static void main(String[] args){

          Message<Integer> m=new Message<Integer>();

          m.setMsg(100);

          fun(m);

  }

  public static void fun(Message<? extends String>temp){

          System.out.println(temp.getMsg());

  }

}

 

3、 泛型接口

interface Message<T>{

  public void print(T t);

}

形式一:

class MessageImp<T> implements Message<T>{

  public void print(T t){

          System.out.print(t);

  }

}

public class TestDemo{

        public static void main(String[] args){

               Message<String> m=new MessageImp<String>();

                      m.print("Hello World");

  }

}

形式二:

class MessageImp implements Message<String>{

  public void print(String t){

          System.out.print(t);

  }

}

public class TestDemo{

        public static void main(String[] args){

               Message<String> m=new MessageImp ();

                      m.print("Hello World");

  }

}

 

4、 泛型方法

定义:

范例:

public class TestDemo{

        public static void main(String[] args){

               String str=fun("Hello World");

               System.out.println(str);

        }

        public static <T>T fun(T t){//T的参数类型由传入值决定

               return t;

        }

}

 

 

5、 总结

1、 泛型解决的是向下转型所带来的安全隐患,其核心的组成就是在声明类或接口的时候不设置参数或属性的类型。

2、 “?”可以接收任意泛型类型,只可取出,不能修改。

 

转载于:https://www.cnblogs.com/muyian/p/6816260.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值