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、自动类型推断机制(钻石表达式)
```java
package 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");
}
} ```