泛型
就是一种不确定的数据类型。
泛型的本质就是类型参数化。
泛型可以省略,如果省略,默认泛型是object类型。
泛型的优点:
-
避免强制类型转换的异常
-
可以把运行时的问题提前到编译时期。
泛型类的定义语法:
public class 类名称<泛型标识,泛型标识, ...>{
private 泛型标识 变量名;
.....
}
使用语法:
类名<具体的数据类型> 对象名 = new 类名<具体的数据类型>();
泛型类:
public class ArrayList<E> { public boolean add(E e){ } public E get(int index){ } }
泛型方法:
public class T { public <E> E sayHello(E e) { return e; } }
泛型接口:
public interface T<E> { boolean add(E e); E get(int index); } public interface Service<T> { void set(T t); T get(int id); }
实现接口的时候确定泛型类型
public class UserService implements Service<User> { }
创建泛型接口对象的时候确定泛型类型
public class UserService<T> implements Service<T> { @Override public void set(T t) { } @Override public T get(int id) { return null; } } UserService<User> service = new UserService<>();
泛型通配符
通常情况下,T,E,K,V,?
? 表示不确定的Java类型
T (type)表示具体的一个Java类型
K V(key value)分别代表Java键值中的key value
E 代表element
public void test(List<?> list){ }