首页 > 代码库 > 泛型的基本定义及使用

泛型的基本定义及使用

                                     泛型

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、 “?”可以接收任意泛型类型,只可取出,不能修改。

 

泛型的基本定义及使用