1、介绍分析
- 泛型这种语法机制,只在程序编译阶段起作用,只是给编译器参考的()运行阶段没作用
- 使用了泛型的好处是什么?
- 集合中存储的元素统一了
- 从集合取出的元素类型是泛型指定的类型,不需要大量的向下转型(不需要强制类型转换,直接调用)
- 泛型的缺点是什么
- 导致集合中存储的元素缺乏多样性
- 大多数业务中,集合中元素的类型统一,所以这种泛型特性被大家认可
- 不用泛型就是Object类型
```java
如果不使用泛型
package generic;
import javafx.animation.Animation;
import java.util.ArrayList; import java.util.Iterator;
public class Demo01 { public static void main(String[] args) { ArrayList mylist = new ArrayList();
Bird b = new Bird();Cat c = new Cat();mylist.add(b);mylist.add(c);// 不使用泛型的时候调用
// Iterator it = mylist.iterator(); // while (it.hasNext()){ // Object obj = it.next(); // Anamil animail = (Anamil) obj; // animail.move(); // }
// 使用泛型的时候调用}
}
class Anamil{ public void move(){ System.out.println(“动物在移动!”); } }
class Cat extends Anamil{ public void catchMouse(){ System.out.println(“猫在老鼠!”); } }
class Bird extends Anamil{ public void fly(){ System.out.println(“鸟儿在空中飞翔!”); } }
使用泛型
ArrayList
<a name="WV84x"></a>### 2、自动类型推断机制(钻石表达式)```javapackage generic;import java.util.ArrayList;import java.util.Iterator;import java.util.List;/*自动类型推断机制(又称为钻石表达式),jdk8之后才允许*/public class Demo02 {public static void main(String[] args) {List<Anamil> mylist = new ArrayList<>();mylist.add(new Cat());mylist.add(new Bird());Iterator<Anamil> it = mylist.iterator();while(it.hasNext()){Anamil animail = it.next();animail.move();}List<String> mystr = new ArrayList<>();mystr.add("a");mystr.add("b");Iterator<String> itstr = mystr.iterator();while(itstr.hasNext()){String str = itstr.next();System.out.println(str);}}}
3、自定义泛型
- <>中的是一个标识符,随便写
- 源码中经常出现的
和 - E -> Element
- T -> Type
- <?Extends> ```java package generic;
public class Demo03
public static void main(String[] args) {Demo03<String> d = new Demo03<>();d.doSome("abc");}
} ```
