Java——泛型
1泛型
泛型是Java中的在JDK5中引入的一种新的特性,泛型提供了编译时类型安全的检测机制,该机制允许程序员在编译时使用非法的数据类型。
泛型本质上就是参数化类型。在我看来,就是为了在类创建时,允许将会被其操作,但是又不知道具体数据类型的数据,当作参数进行一个定义。
2 Java 中泛型标记符:
E - Element (在集合中使用,因为集合中存放的是元素)
T - Type(Java 类)
K - Key(键)
V - Value(值)
N - Number(数值类型)
?- 表示不确定的Java类型
泛型的使用方法就是<E>
3 泛型方法
在定义Java方法的时候加入泛型,定义一个在调用的时候,可以接受不同参数类型。
例如:
class Test{
public static void main(String[] args){
int a = 10;
test(a);
String b = "test";
test(b);
}
public static <E> void test(E e){
System.out.println(e);
}
}
当然这是最简单的,如果你传入的类型不是基本类型,或者没有重写equals的话,输出的应该是一个逻辑地址。
4 泛型类
泛型类的声明和非泛型类的声明类似,除了在类名后面添加了类型参数声明部分。
class Test<T>{
T t;
public void show(T val){
}
public static void main(String[] args) {
Test<String> test = new Test<>();
}
}
当类的定义加入泛型, 那么我们就可以在类中使用这个泛型类型。包括但不限于定义成员属性、形参列表中的数据类型等等…
5 泛型通配符
泛型的通配符就是?
例子1:?的意思应该是随便什么类型的列表都行
class Test{
public static void show(List<?> list){
System.out.println(list);
}
public static void main(String[] args) {
ArrayList<Dog> dogs = new ArrayList<>();
dogs.add(new Dog("a"));
show(dogs);
}
}
class Dog{
String name;
public Dog(String name) {
this.name = name;
}
@Override
public String toString() {
return "Dog{" +
"name='" + name + '\'' +
'}';
}
}
例子2:<? extends Animal>的意思是只要列表里面存的数据的数据类型的父类是Animal,就可以。
class Test{
public static void show(List<? extends Animal> list){
System.out.println(list);
}
public static void main(String[] args) {
ArrayList<Dog> dogs = new ArrayList<>();
dogs.add(new Dog("a"));
show(dogs);
}
}
class Dog extends Animal{
String name;
public Dog(String name) {
this.name = name;
}
@Override
public String toString() {
return "Dog{" +
"name='" + name + '\'' +
'}';
}
}
class Animal{}
大概就这两种用法,以后遇到了再更新