什么是泛型
泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型。泛型的本质是将数据的类型参数化,也就是说所操作的数据类型被指定为一个参数。
Java的泛型是伪泛型,这是因为Java在编译期间,所有的泛型信息都会被擦掉,这也就是通常所说类型擦除。
常用的通配符为: T,E,K,V,?
? 表示不确定的 java 类型
T (type) 表示具体的一个java类型
K V (key value) 分别代表java键值中的Key Value
E (element) 代表Element
泛型的三种使用方式:泛型类、泛型接口、泛型方法
1. 泛型类
泛型类在实例化时,必须指定T的具体类型
public class Generic<T>{
//key这个成员变量的类型为T,T的类型由外部指定
private T key;
public Generic(T key) { //泛型构造方法形参key的类型也为T,T的类型由外部指定
this.key = key;
}
public T getKey(){ //泛型方法getKey的返回值类型为T,T的类型由外部指定
return key;
}
}
2. 泛型接口
public interface Generator<T> {
public T next();
}
实现泛型接口,不指定类型:
class GeneratorImpl<T> implements Generator<T>{
@Override
public T next() {
return null;
}
}
实现泛型接口,指定类型:
class GeneratorImpl<String> implements Generator<String>{
@Override
public String next() {
return "hello";
}
}
3. 泛型方法
public static <T> T pop(String key, Class<T> clazz)
{
try
{
AMPRedisClient redis = new AMPRedisClient();
String data = redis.lpop(key);
if ( data != null && data.length() > 0 )
{
return JSON.parseObject(data, clazz);
}
}
catch (Exception e)
{
logger.error("[x] queue utils execute rpop exception.", e);
}
return null;
}