# Java教程 - 2 泛型
当在 Java 中使用泛型(Generics),我们可以将类型参数化,从而实现更通用和可重用的代码。泛型允许我们编写一次代码,适用于多种类型,提高了代码的灵活性和可维护性。
我们前面在使用集合的时候,已经接触过泛型了。
举个栗子:
List 使用泛型:
package com.doubibiji.generics;
import java.util.ArrayList;
import java.util.List;
public class GenericsTest {
public static void main(String[] args) {
// 使用泛型,只能放字符串类型
List<String> colorList = new ArrayList<>();
colorList.add("red");
// colorList.add(123); // 报错,只能放字符串
// 获取元素
String s = colorList.get(0);
System.out.println(s);
// 使用泛型,只能放整形类型
List<Integer> numList = new ArrayList<>();
numList.add(123);
// numList.add("red"); // 报错,只能放整形
// 获取元素
Integer i = numList.get(0);
System.out.println(i);
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
在上面,通过对 List 使用泛型,可以对集合中元素的类型进行约束,使用泛型可以创建不同元素类型的集合,在获取元素的时候也不用进行类型转换。
List<String> colorList = new ArrayList<String>();
// JDK1.7以后可以简化
List<String> colorList = new ArrayList<>();
1
2
3
2
3
如果不使用泛型,那么集合中的元素的类型就是 Object 类型,虽然可以添加任何类型的元素,但是在获取元素的时候,就无法知道原来是什么类型的,就需要进行强制转换,如果类型不匹配,还会报错。
import java.util.ArrayList;
import java.util.List;
public class GenericsTest {
public static void main(String[] args) {
// 不使用泛型,没有类型限制
List list = new ArrayList();
list.add(123);
list.add("doubi");
if (list.get(0) instanceof Integer) {
Integer i = (Integer) list.get(0);
System.out.println(i);
}
if (list.get(1) instanceof String) {
String s = (String) list.get(1);
System.out.println(s);
}
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
所以使用泛型可以减少类型转换,提高代码复用,使代码更安全清晰。
同样,Map也可以指定泛型:
public static void main(String[] args) {
Map<String, Integer> map = new HashMap<>();
map.put("zhangsan", 123);
map.put("lisi", 234);
Integer value1 = map.get("zhangsan");
System.out.println(value1);
}
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
我们也可以使用泛型机制创建我们的泛型类、泛型方法和泛型接口。
内容未完......