一. 泛型基本知识
1. 泛型字母基本规范
E — Element,常用在java Collection里,如:List<E>,Iterator<E>,Set<E>
K,V — Key,Value,代表Map的键值对
N — Number,数字
T — Type,类型,如String,Integer等等
2. 泛型接口定义及使用
接口定义如下:
interface Info<T> { // 在接口上定义泛型
public T getVar() ; // 定义抽象方法,抽象方法的返回值就是泛型类型
public void setVar(T x);
}
使用方式一:
class InfoImpl implements Info<String> ...
使用方式二(通过实现类的泛型传递实现):
class InfoImpl<T> implements Info<T> ...
class InfoImpl<T,K,U> implements Info<U> ...
3. 泛型方法定义及使用
泛型方法定义如下:
public class StaticFans {
//静态函数
public static <T> void StaticMethod(T a) {
Log.d("harvic","StaticMethod: "+a.toString());
}
//普通函数
public <T> void OtherMethod(T a) {
Log.d("harvic","OtherMethod: "+a.toString());
}
}
使用方式一(隐式传递, 代码不利于阅读和维护):
//静态方法
StaticFans.StaticMethod("adfdsa");
//常规方法
StaticFans staticFans = new StaticFans();
staticFans.OtherMethod(new Integer(123));
使用方式二(显示传递, 建议方式):
//静态方法
StaticFans.<String>StaticMethod("adfdsa");
//常规方法
StaticFans staticFans = new StaticFans();
staticFans.<Integer>OtherMethod(new Integer(123));
4. 方法返回值存在泛型定义
1. 泛型字母基本规范
E — Element,常用在java Collection里,如:List<E>,Iterator<E>,Set<E>
K,V — Key,Value,代表Map的键值对
N — Number,数字
T — Type,类型,如String,Integer等等
2. 泛型接口定义及使用
接口定义如下:
interface Info<T> { // 在接口上定义泛型
public T getVar() ; // 定义抽象方法,抽象方法的返回值就是泛型类型
public void setVar(T x);
}
使用方式一:
class InfoImpl implements Info<String> ...
使用方式二(通过实现类的泛型传递实现):
class InfoImpl<T> implements Info<T> ...
class InfoImpl<T,K,U> implements Info<U> ...
3. 泛型方法定义及使用
泛型方法定义如下:
public class StaticFans {
//静态函数
public static <T> void StaticMethod(T a) {
Log.d("harvic","StaticMethod: "+a.toString());
}
//普通函数
public <T> void OtherMethod(T a) {
Log.d("harvic","OtherMethod: "+a.toString());
}
}
使用方式一(隐式传递, 代码不利于阅读和维护):
//静态方法
StaticFans.StaticMethod("adfdsa");
//常规方法
StaticFans staticFans = new StaticFans();
staticFans.OtherMethod(new Integer(123));
使用方式二(显示传递, 建议方式):
//静态方法
StaticFans.<String>StaticMethod("adfdsa");
//常规方法
StaticFans staticFans = new StaticFans();
staticFans.<Integer>OtherMethod(new Integer(123));
4. 方法返回值存在泛型定义
public static <T> List<T> parseArray(String response,Class<T> object) ...
5. 类型绑定extends、super
T extends Fruit
T extends Fruit & Serializable
T super Fruit
6. 通配符?
说明: 通配符只能用在填充操作上
如果你想从一个数据类型里获取数据,使用 ? extends 通配符(能取不能存)
如果你想把对象写入一个数据结构里,使用 ? super 通配符(能存不能取)
如果你既想存,又想取,那就别用通配符。
个人总结,转自:
http://blog.youkuaiyun.com/harvic880925/article/details/49872903
http://blog.youkuaiyun.com/harvic880925/article/details/49883589