随便扯点
我为什么要再次学Java
java知识是作为Android开发的语言基础,虽然现在已经推出了kotlin,但是基于以下原因我还是需要好好牢牢掌握java:
①SDK还是改成java,kotlin也需要编译成为java运行;
②目前大量的第三方库和继承与前任的代码都是java所写的;
③Java语言应用不仅仅在Android,就是在后台开发中也是一个最流行的语言;
④大公司面试都要求我们有扎实的Java语言基础。
所以,好好学Java!
一.为什么要用泛型
假如我们需要进行两个整型数字的相加:
public int addInt(int a,int b) {
return a+b;
}
ok,很简单,那么如果需求变了,我们需要两个double型数据的相加,好,那就再写一个方法出来
public double addDouble(double a,double b) {
return a+b;
}
当然,这很简单。但是在实际应用当中,很多情况下我们不一定事先知道我们需要的数据类型,难道我们要把所有数据类型的数字相加的方法都写一遍吗?这未免有点太扯犊子了。如果有那么一种类型,它可以接受所有的数据类型,那就太棒了!没错,这就是泛型。所以上面两个(或者说n多个)方法可以简化为一个函数(虽然也要进行类型的判断),但是达到了简化方法数目的目的。
OK,这样就引出了泛型的第一个好处
适用于多种数据类型执行相同的代码
那么继续来讲。我们都用过集合,存储数据,比如ArrayList,当你存入了一堆String数据的时候,再存入一个Int数据的时候,编译器不会显示任何错误,因为此时list默认的类型为Object类型,但是在运行的时候如果需要强转成String类型后输出,就会出错了。报错一般是
java.lang.ClassCastException
但是如果一开始就使用了泛型来规定存放的数据只能是String类型(尖括号里面加个String),那在编译阶段编译器就能显示错误,这样就方便多了。所以这里又得出了泛型的第二个好处:
泛型中的类型在使用时指定,不需要强制类型转换
泛型作用:
①相同的代码可以适应多种数据类型
②在编码的过程中就可以指定数据类型,而不需要进行强转,不至于编译的时候看不出来,运行的时候才报错。
二.什么是泛型
先看一段官方的理解:
泛型,即“参数化类型”。顾名思义,就是将类型由原来的具体的类型参数化,类似于方法中的变量参数,此时类型也定义成参数形式(可以称之为类型形参),然后在使用/调用时传入具体的类型(类型实参)。
这一段话不理解无所谓,主要是会用,下面的知识要懂。
1.泛型类
(1)一个T
public class NormalGeneric<T> {
private T data;
public NormalGeneric(T data) {
this.data = data;
}
}
(2)一个T一个K
public class NormalGeneric<T,K> {
private T data