泛型 (2)泛型類 泛型方法 泛型介面

2021-08-27 16:11:14 字數 3702 閱讀 3089

一、泛型類

定義person類

package cn.itcast.p2.bean;

public class person implements comparable

public person(string name, int age)

public int compareto(person p)

@override

public int hashcode()

@override

public boolean equals(object obj) else if (!name.equals(other.name))

return false;

return true;

} public string getname()

public void setname(string name)

public int getage()

public void setage(int age)

@override

public string tostring()

}

定義student類

package cn.itcast.p2.bean;

public class student extends person

public student(string name, int age)

@override

public string tostring()

}

定義student類

package cn.itcast.p2.bean;

public class student extends person

public student(string name, int age)

@override

public string tostring()

}

定義乙個工具類,將工具類中所有的引數型別全部定義為object 型別,這樣所有型別的資料就都能傳遞進來。這就是泛型類。

public class tool 

public void setobject(object object)

}

操作泛型類

package cn.itcast.p4.generic.define.demo;

import cn.itcast.p2.bean.student;

import cn.itcast.p2.bean.worker;

public class genericdefinedemo3

}

傳入student 物件以後編譯通過,執行無問題。

當傳入worker物件以後編譯通過,但是執行出現問題。

這是因為迭代的型別是student型別。

把 student student =(student)tool.getobejct(); 換成object    student=(obejct)tool.getobject()以後執行就沒有問題了。

在jdk 1.5以後使用泛型來接收類中要操作的引用資料型別。

泛型類什麼時候用? 當類中操作的引用資料型別不確定資料型別的時候,就用泛型l來表示。

定義乙個泛型類

public class tool

public void setobject(qq object)

/*** 將泛型定義在方法上。

* @param str

public void show(w str)

public void print(qq str)

/*** 當方法靜態時,不能訪問類上定義的泛型。如果靜態方法使用泛型,

* 只能將泛型定義在方法上。

* @param obj

*/public static void method(y obj)

}

傳遞乙個student 物件 編譯通過。 

傳遞乙個worker() 物件時,編譯就不能通過了。

這是因為定義了泛型。 工具類物件的型別是student 。worker和student 型別不匹配。編譯報錯。

再一次驗證了泛型將執行時的異常放到了編譯時。提高了程式的安全性。

二、泛型方法

重新寫乙個工具類,定義一些泛型『類』

public class tool

public void setobject(qq object)

/*** 將泛型定義在方法上。可以傳遞任意型別物件

* @param str

*/public void show(w str)

public void print(qq str)

/*** 當方法靜態時,不能訪問類上定義的泛型。如果靜態方法使用泛型,

* 只能將泛型定義在方法上。

* @param obj

*//**

* 當方法靜態時,不能訪問類上定義的泛型,因為靜態不需要物件可以用類名直接訪問。

* @param obj

*/// public static void method2(qq obj)

*** 當泛型宣告在方法上時,必須放在修飾符的後面,返回值的前面。

* * @param obj

*/public static void method(y obj)

}

使用泛型類

package cn.itcast.p4.generic.define.demo;

public class genericdefinedemo4

}

結果輸出

三、泛型介面

package cn.itcast.p4.generic.define.demo;

public class genericdefinedemo5

}//泛型介面,將泛型定義在介面上。

inte***ce inter

/** *

* 第二種實現 傳入q 任意型別的引數

* @author administrator

* * @param */

class interimpl2implements inter

}/**

* 第一種實現,傳入字串

泛型類,泛型方法,泛型介面

泛型,就是一種不確定的資料型別。如果在類後面加上 這個類就變成了泛型類。這個 t可以使用任意的字母代替。表示定義了一種不確定的資料型別,這種不確定的資料型別必須在使用這個類 比如建立物件 的時候才能確定下來。如果希望縮小泛型的範圍,延後泛型的確定時間,讓泛型在呼叫方法的時候確定,那麼我們可以使用泛型...

Dart 中泛型 泛型方法 泛型類 泛型介面

泛型就是解決類 介面 方法的復用性以及對不特定資料的支援 void main 定義乙個泛型方法 t printdata t value running dart users zhoujian dartdemo demo.dart 2zhoujian done exited with code 0 i...

泛型 泛型類 泛型方法 泛型擦除

1 是什麼?一種允許我們在不確定引數型別時候使用的型別。例如我不知道a方法應該會傳string還是int,我就用個泛型先佔坑。2 為什麼要用泛型?泛型可以在編譯期自動確定具體型別,檢查型別是否匹配,可以提高 的重用率,減少冗餘編碼。3 泛型與object的區別?像上面說的我不知道方法a的引數型別,其...