有人会疑问,泛型是什么东东? 引用官方的话来讲: java
泛型就是:“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的时候才发现代码有问题了。不知道我说的这么白白了,你明白了没有,尚未明白,那请往下看.... 测试
好比,以前咱们想要在操做集合类中的对象是这样写: this
static void expurgate(Collection c) { for (Iterator i = c.iterator(); i.hasNext(); ){ if (((String) i.next()).length() == 4){ i.remove(); } } }
看着这么多的括号你头疼了吗??反正我是晕了~来看看使用泛型以后的代码: spa
static void expurgate(Collection<String> c) { for (Iterator<String> i = c.iterator(); i.hasNext(); ){ if (i.next().length() == 4){ i.remove(); } } }
感受没有少什么东西,不过清析了不少,没错!这就是泛型的一个简单的应用。可让咱们在从集合中取元素的时候再也不作讨厌的强制类型转换,也不用担忧我转换的类型是否是集合里面存储的类型,用一个字来形容,啊~~~(擦,不要想多了)。 code
其实,只是上面单纯的这些,还不足以让我如此的激动,泛型还能够应用在方法的参数里,那是什么概念?直接上代码: 对象
/** * 参数使用泛型 */ 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方法的参数使用了一个泛型,那么这样用有什么好处呢?那就是:本身体会去吧~ rem
其实,只是上面的这些情景,不足以让我如此的激动,泛型还能够用在返回值上(啊??你说什么~~),没错,泛型也能够用在返回值类型上。代码以下: 编译器
/** * 返回值使用泛型 */ public <E extends Comparable<E>>E retunGenerics(E e1, E e2){ E t = e1; if(e2.compareTo(e1) > 0 ){ t = e2; } return t; }
这时候,你是否是也已经开始暗爽了呢,那你猜我下面要说些什么呢?没错,恭喜你答对了 it
其实,只是上面的这些情景,还不足以让我如此的激动。泛型还能够用在类上(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*)@$%^^^^^^****