泛型<E>
1. 泛型
- 泛型:是一種未知的數據類型,當不知道會使用什么數據類型(或同一個方法可能接受不同數據類型),用泛型
- 泛型也可以作為變量接受數據類型
- E:未知的數據類型,即泛型,(在JAVA源碼統一使用E,但其實可以是任意字母或單詞)
- 在創建對象時會確定泛型E的數據類型,并將數據類型作為參數傳遞,賦值給泛型E
- 泛型沒有繼承的概念,< Integer >并不是< Object >的繼承泛型
- 泛型可以作為返回值,參數,數據類型,如:public class ArrayList< E >; public bollean add(E e); public E get (int index);
2. 不使用泛型創建集合
利:默認類型Object,可以存儲任意類型 弊:不安全,可能引發異常 ```javaArrayList list =new ArrayList();list.add("asd");//可以添加任意類型list.add(1);for (Object obj:list){System.out.println(obj);//如果想使用String特有的方法,需要向下轉型String s=(String)obj;System.out.println(s.length());//ClassCastException異常:類型轉換異常//因為list中含有Integer類型數據,不能轉換到String ```3. 使用泛型創建集合
利:避免了類型轉換,把運行期代碼異常,提前到了編譯器期 弊:只能存儲單一類型數據4. 自定義含泛型的類
加在類名之后 ```java package linxu.day17; public class myEclass<E> {//在類名后加<E>,其內所有和此E相同的數據類型都有E替換private E name;public myEclass() {}public myEclass(E name) {this.name = name;}public E getName() {return name;}public void setName(E name) {this.name = name;} }package linxu.day17;import java.util.ArrayList; import java.util.Iterator; public class demomain {public static void main(String[] args) {demo2();}public static void demo2(){myEclass<String> str= new myEclass<>();//創建自定義泛型數據str.setName("靈虛");System.out.println(str.getName());} } ```5. 自定義含泛型參數的方法
泛型定義在修飾符和返回值之間,在調用方法時確定泛型的數據類型 格式:`修飾符 < E > 返回值 方法名(參數列表(泛型))` 必須在修飾符和返回值之間加上泛型符號,參數列表才能使用泛型作為參數 ```java package linxu.day17; public class demomain {public static void main(String[] args) {method(1);method("sdc");}public static <M> void method(M m){System.out.println(m);}//這里是一個普通的方法;也可以在其他類中定義含泛型的成員方法,靜態方法等等 } ```6. 含泛型的接口
含有泛型的接口,有倆種使用方式7. 泛型通配符
當使用泛型類或接口,傳遞的數據仍然不能確定數據類型,使用泛型通配符<?>
 但是,一旦使用了泛型通配符,那么只能使用Objects的共性方法集合中元素自身的方法無法使用
 但是泛型沒有繼承的概念,< Object >并不能表示接受所有數據類型
不能創建對象使用,只能作為方法參數使用
(1)泛型的上限
格式:數據類型 <? extends 類>對象名
意義:只能接受該類型及其子類
(2)泛型的下限
格式:數據類型 <? super 類>對象名
意義:只能接受該類型及其父類
總結
 
                            
                        - 上一篇: 实现在Node环境与浏览器环境下生成二维
- 下一篇: 简单的计算器程序却蕴涵的有趣的数据结构
