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());

转载于:https://www.cnblogs.com/zhenyu-go/p/5536248.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值