Java泛型详解

1 篇文章 0 订阅

Java 泛型详解

首先我们要知道为什么会有泛型这种东西,按照我的理解就是:

有了泛型,可以使得一个类操作广泛的其他类

没有泛型之前,我们其实可以使用Object来进行广泛的代表,但这毕竟不是一个好方法,比如如下代码

    Object o = new String();
    String s = (String) o;

看到没有,就算是使用了Object,但从父类到子类时是要进行类型转换的。稍不小心就有可能发生类型转换异常,就像下面的这种代码

    Object o = new Integer(1);
    String s = (String) o;

这样的代码再编译的时候是不会报错的,只有在运行的时候才会爆出一个类型转换异常的错误

1.定义带类型参数的类

定义带类型参数的类很简单,形式如下

public class Fanxing<T> {
}

这是最简单的,只有一个类型参数,如果你想多定义几个类型参数就要像这样写

public class Fanxing<T,S,K,L> {
}

想要多少就要多少,只不过是多加几个逗号和字母而已
那么如果我想限定这些类型参数之间的关系怎么写呢?比如我要S是T得子类,那就要像下面这样写了

public class Fanxing<T,S extends T,K,L> {
}

类型参数之间限定关系只能使用extends

2.定义带类型参数的方法

定义带类型参数的方法也很简单,就像下面这样

public <T> void set(T t){
}

public <T,S extends T> void set1(T t,S s){
}

public <T,S extends T> T get(T t,S s){
}

public <T,S extends T> S get1(T t,S s){
}

上面给出了几种通用的定义带类型参数的方法的写法

3.

1.这个实例的类必须是Fanxing

2.这个实例所操作的类必须是Parent,也就是尖括号中的那个类

这样一来,对于第二个方法就好说了

test2(f1);//不可行
test2(f2);//可行

接下来看方法三

test3(f1);//可行
test3(f2);//可行

那么这里为什么就两个都可行了呢?
看我上面总结出的两点规则是否都满足
1.f1,f2都是Fanxing这个类的实例,这是满足的
2.f1,f2操作的类满足尖括号中的类吗?答案是满足,因为尖括号中是
? extends Parent
这句的意思就是:这个实例也不确定操作的类是哪一个,但是这个类必须继承自Parent,虽然没有自己继承自己一说,但是显然Child和Parent都是满足尖括号中的关系的。

如果上面那句话理解了的话,那么方法4的结果就好说了

test4(f1);//可行
test4(f2);//可行

因为在方法4中要求实例操作的那个类必须是Child的父类,所以Child和Parent都是满足的

方法5对f1和f2也都是可行的

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值