有人会疑问,泛型是什么东东? 引用官方的话来说:
泛型就是:“the type system allows a type or method to operate on objects of various types while providing compile-time type safety. It adds compile-time type safety to the Collections Framework and eliminates the drudgery of casting”。看不明白吗??没关系,下面我就给大家解释一下我的理解(注:是我的理解,如果你表达的更好,欢迎指正~)。
说白了,jdk中加入了泛型,可以让我们省去类型强制转换的工作,同时加到编译时异常中来;再说白一点,就是你使用了泛型之后,不用再做强制类型转换了,同时如果你的赋值对象不匹配,那么编译器会警告你这里出错了,而不用再等到程序运行时报了一个ClassCastException的时候才发现代码有问题了。不知道我说的这么白白了,你明白了没有,还没有明白,那请往下看....
比如,之前我们想要在操作集合类中的对象是这样写:
static void expurgate(Collection c) {
for (Iterator i = c.iterator(); i.hasNext(); ){
if (((String) i.next()).length() == 4){
i.remove();
}
}
}
看着这么多的括号你头疼了吗??反正我是晕了~来看看使用泛型之后的代码:
static void expurgate(Collection<String> c) {
for (Iterator<String> i = c.iterator(); i.hasNext(); ){
if (i.next().length() == 4){
i.remove();
}
}
}
感觉没有少什么东西,不过清析了很多,没错!这就是泛型的一个简单的应用。可以让我们在从集合中取元素的时候不再做讨厌的强制类型转换,也不用担心我转换的类型是不是集合里面存储的类型,用一个字来形容,啊~~~(擦,不要想多了)。
其实,只是上面单纯的这些,还不足以让我如此的激动,泛型还可以应用在方法的参数里,那是什么概念?直接上代码:
/**
* 参数使用泛型
*/
public static <T> void testParam(T param){
System.out.println(param);
}
public static void main(String[] args) {
testParam(2f);
testParam("test");
testParam(123);
}
运行结果: 2.0
test
123
观众朋友们看出什么来了吗??没错,就是我testParam方法的参数使用了一个泛型,那么这样用有什么好处呢?那就是:自己体会去吧~
其实,只是上面的这些情景,不足以让我如此的激动,泛型还可以用在返回值上(啊??你说什么~~),没错,泛型也可以用在返回值类型上。代码如下:
/**
* 返回值使用泛型
*/
public <E extends Comparable<E>>E retunGenerics(E e1, E e2){
E t = e1;
if(e2.compareTo(e1) > 0 ){
t = e2;
}
return t;
}
这时候,你是不是也已经开始暗爽了呢,那你猜我下面要说些什么呢?没错,恭喜你答对了
其实,只是上面的这些情景,还不足以让我如此的激动。泛型还可以用在类上(oh,shit!),代码如下:
public class GenericsType <T>{
private T t ;
public GenericsType(T t){
this.t = t ;
}
public void printValue(){
System.out.println(t);
}
}
好,这时候如果我调用构造函数进行对象初始化的时候,会有什么不同呢??我写了一下
/**
* 测试泛型类
*/
@Test
public void testGenericsType(){
GenericsType<Integer> gt = new GenericsType<Integer>(10);
gt.printValue();
GenericsType<String> gt1 = new GenericsType<String>("test");
gt1.printValue();
}
想知道结果是什么吗??那你们回去自己试一下吧,如果你对上面的内容已经掌握,我想你已经知道结果了~
好了,说了这么多,不知道观众朋友们在使用泛型上有没有一点自己的想法啦??如果有好的想法,说出来哈!~
Thank you ~
goodbey ..
&(#$)#Q&$)(&#)($#W*)@$%^^^^^^****
来源:oschina
链接:https://my.oschina.net/u/1419455/blog/183039