—–## 自定義泛型 ##
原理:自定義泛型可以理解爲是一個數據類型的佔位符,或者理解爲是一個數據類型的變量
1. 泛型方法
泛型方法格式:
泛型方法的定義格式: 修飾符 <聲明自定義泛型>返回值類型 函數名(形參列表){
}
注意:
1.1.在方法上的自定義泛型的具體數據類型是調用該方法時傳入實參時確定的
1.2.自定義泛型使用的標識符只要符合標識符的命名規則即可
實戰需求:定義一個函數可以接收任意類型的參數,要求參數的返回值類型與實參的數據類型要一致
代碼如下
public class GenecityMethod {
public static void main(String args[]){
Integer i = print(12);//Integer
String s = print("abc");//String
System.out.println(i);
System.out.println(s);
}
//<T>把T字母聲明爲自定義的泛型
public static <T> T print(T o){
return o;
}
}
2.泛型類
泛型類的定義格式:
class 類名<聲明自定義的泛型>{
}
注意:
2.1.在類上自定義的反省你的具體數據類型實在創建對象的時候指定的
2.2.在類上自定義了泛型,如果創建該類的對象時沒有指定泛型的具體類型,則默認爲Object類型
實戰需求自定義一個集合對象
代碼如下:
class MyList <T>{
Object[] arr;
int index = 0;
public MyList(){
arr = new Object[10];
}
public void add(T o){
arr[index++] = o;
}
}
public class GenecityClass {
public static void main(String args[]){
MyList<String> list = new MyList<String>();
list.add("123");
MyList list2 = new MyList();
list2.add(123);//若不指定自定義類型,則爲Object類型
}
}
泛型接口
泛型接口的定義格式:
interface 接口名<聲明自定義的泛型>{}
注意:
3.1.在接口上自定義泛型的具體的數據類型是在實現該接口的時候指定的 對應第一種
3.2.如果一個接口自定義了泛型,如果實現該接口時時沒有指定泛型的具體類型,則默認爲Object類型
如果想在創建接口實現類對象的時候再指定接口自定義泛型的具體數據類型? 對應第二種
實戰需求兩種方法實現
代碼如下:
//接口中
public interface GenecityInterface<T> {
public void add(T t);
public void remove(T t);
}
//類中
/*第一種,實現該接口的時候指定自定義泛型的具體的數據類型
* public class i implements GenecityInterface<String>{
@Override
public void add(String t) {
// TODO Auto-generated method stub
}
@Override
public void remove(String t) {
// TODO Auto-generated method stub
}
}*/
/*第二種,在創建接口實現類對象的時候再指定接口自定義泛型的具體數據類型
* public class i<T> implements GenecityInterface<T>{
public static void main(){
new i<String>();
}
@Override
public void add(T t) {
// TODO Auto-generated method stub
}
@Override
public void remove(T t) {
// TODO Auto-generated method stub
}
}