Java泛型详解
来源:互联网 发布:免费会计软件 编辑:程序博客网 时间:2024/05/21 17:03
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也都是可行的
- Java泛型详解
- java泛型详解
- java泛型详解
- Java泛型详解
- Java泛型详解
- java泛型详解
- Java泛型详解
- java泛型详解
- java 泛型详解
- java 泛型详解
- Java 泛型详解
- java 泛型详解
- java 泛型详解
- java泛型详解
- java 泛型详解
- Java泛型详解
- java 泛型详解
- java 泛型详解
- spark 1.6 数据
- 求值1-(1/2)+...(-1)^n*(1/m)
- ACM 2010水仙花数
- [leetcode] Verify Preorder Serialization of a Binary Tree
- 【面试经典题之字符串】用C或C++写一个函数,实现反转一个null结尾的字符串
- Java泛型详解
- Android学习之自定义AlertDialog
- java IO-搜索目录所有子文件、复制文件到指定地方
- 第一次实验2-1
- 【Android】安卓学习笔记之使用WebView加载网页
- Huawei 2014 机试题
- 一、计算机系统概述
- 歌曲背后的故事《可回答音乐相关的问题》
- poj 1038 Bugs Integrated, Inc. 状压dp