`
agan112
  • 浏览: 67353 次
  • 来自: 金陵那平
社区版块
存档分类
最新评论

泛型理解

 
阅读更多
泛型例子:
1.数组
List<Integer> li = new ArrayList<Integer>();

li.put(new Integer(3));

Integer i = li.get(0);
2.图
Map<String, String> m = new HashMap<String, String>();

m.put("key", "blarg");

String s = m.get("key");
3.



谨记:
泛型不是协变的,例如下面的代码不是正确的
List<Integer> intList = new ArrayList<Integer>();
List<Number> numberList = intList; // invalid



使用泛型原因:
之所以声明泛型方法,一般是因为您想要在该方法的多个参数之间宣称一个类型约束。例如,下面代码中的ifThenElse()方法,根据它的第一个参数的布尔值,它将返回第二个或第三个参数:
public <T> T ifThenElse(boolean b, T first, T second) {
return b ? first : second;
}
注意,您可以调用ifThenElse(),而不用显式地告诉编译器,您想要T的什么值。编译器不必显式地被告知 T 将具有什么值;它只知道这些值都必须相同。编译器允许您调用下面的代码,因为编译器可以使用类型推理来推断出,替代T的String满足所有的类型约束:
String s = ifThenElse(b, "a", "b");

类似地,您可以调用:
Integer i = ifThenElse(b, new Integer(1), new Integer(2));
但是,编译器不允许下面的代码,因为没有类型会满足所需的类型约束:
String s = ifThenElse(b, "pi", new Float(3.14));


使用类型通配符:
void printList(List<?> l) {
for (Object o : l)
System.out.println(o);
}


0
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics