Java泛型学习笔记 - 泛型类

Posted ZhenyuGo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java泛型学习笔记 - 泛型类相关的知识,希望对你有一定的参考价值。

1. 我们先写一个没有泛型的类Box:

 1 public class Box {
 2 
 3     private Object obj;
 4     
 5     public Box() {}
 6 
 7     public Object getObj() {
 8         return obj;
 9     }
10 
11     public void setObj(Object obj) {
12         this.obj = obj;
13     }
14 
15     public Box(Object obj) {
16         super();
17         this.obj = obj;
18     }
19 
20 }

这时我们可以存入任意类型的数据, 反正他们都是Object的子类, 存入时会自动类型提升. 没有任何检查方法.

我们来将其改为带有泛型的类:

 1 public class Box<T> {
 2 
 3     private T obj;
 4     
 5     public Box() {}
 6 
 7     public T getObj() {
 8         return obj;
 9     }
10 
11     public void setObj(T obj) {
12         this.obj = obj;
13     }
14 
15     public Box(T obj) {
16         super();
17         this.obj = obj;
18     }
19 
20 }

就是这么简单, 只需在类名称的后面加上<T>即可, 在类中使用T来代表泛型指定的数据类型. 

2. 这里顺便说一下类型参数的命名规范:
理论上你可以起任何你想要起的名字, 但最好是单个大写字母, 下面是一些约定俗成规范:

  •  E - Element (在集合中使用,因为集合中存放的是元素)
  •  T - Type(Java 类)
  •  K - Key(键)
  •  V - Value(值)
  •  N - Number(数值类型)
  •  S、U、V  - 2nd、3rd、4th types

3. 使用该类的时候, 我们就可以这样写:

1 Box<String> b = new Box<>();
2 b.setObj("aaa");
3 // b.setObj(11); // 编译报错
4 String s = b.getObj();

4. 使用多个类型参数:

在我们使用Map时应该已经注意到了, Map使用泛型时需要设定两个类型参数, 如HashMap<String, Integer>. 我们在定义自己的泛型类的时候也可以定义多个类型参数, 如:

 1 public class Box<T1, T2, T3> {
 2 
 3     private T1 t1;
 4     private T2 t2;
 5     private T3 t3;
 6     
 7     public Box() {}
 8     
 9     public Box(T1 t1, T2 t2, T3 t3) {
10         super();
11         this.t1 = t1;
12         this.t2 = t2;
13         this.t3 = t3;
14     }
15 
16     public T1 getT1() {
17         return t1;
18     }
19 
20     public void setT1(T1 t1) {
21         this.t1 = t1;
22     }
23 
24     public T2 getT2() {
25         return t2;
26     }
27 
28     public void setT2(T2 t2) {
29         this.t2 = t2;
30     }
31 
32     public T3 getT3() {
33         return t3;
34     }
35 
36     public void setT3(T3 t3) {
37         this.t3 = t3;
38     }
39 
40 }

使用:

1 Box<String, Integer, Double> b = new Box<>("aaa", 10, 3.14);
2 System.out.println(b.getT1());
3 System.out.println(b.getT2());
4 System.out.println(b.getT3());

以上是关于Java泛型学习笔记 - 泛型类的主要内容,如果未能解决你的问题,请参考以下文章

Java笔记-泛型与集合框架

Java泛型学习笔记 - 泛型接口

Java泛型学习笔记 - 泛型方法

Kotlin学习笔记——接口抽象类泛型扩展集合操作符与Java互操作性单例

泛型学习笔记

java学习笔记(Core Java) 8 泛型