1. 程式人生 > >泛型的基本定義及使用

泛型的基本定義及使用

turn test 出現 span color nts extend 參數類型 子類

                                    泛型

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

泛型的基本定義及使用