今天我们来说说Java的泛型,所谓的泛型就是定义安全的数据类型,我们来看看下面的例子.首先我们来看看没有使用泛型的例子。
来看看下面的代码.
package test.DrawFrame;
/**
* @author hackbase Java的泛型的处理
*/
public class TestDemo1 {
Object over;
public static void main(String[] args) {
TestDemo1 t1 = new TestDemo1();
TestDemo1 t2 = new TestDemo1();
t1.setOver(true);
t2.setOver(12.34);
boolean d1 = (boolean) t1.getOver();
double f2 = (double) t2.getOver();
System.out.println(d1);
System.out.println(f2);
int i = (int) t2.getOver();
System.out.println(i);
}
public Object getOver() {
return over;
}
public void setOver(Object over) {
this.over = over;
}
}
在上面的代码,我们可以看到,当我们没有使用泛型的时候,必须使用强制类型转换才能实现.并且两边的数据类型必须时一致的
要不,就会出现错误,例如下面的代码.
//创建浮点类型的对象
t2.setOver(12.34);
//这里必须使用强制转换才行,而且必须时Double才行.
double f2 = (double) t2.getOver();
编译器就会抛出类型转换异常的错误.假如我们将这里的Double改变成为了Int类型的时候,编译器就会抛出类型转换错误的异常,因为我们我们传入的 时一个浮点数据,jvm自动转换为浮点类型的对象。浮点类型的对象不能转换为整数类型的。因此这里会报错.
为了定义更加安全的数据类型,我们使用的泛型来进行定义的。我们来看看泛型如何定义,泛型的定义非常的简单,就是在类名的后面加上一对尖括号。中间协商泛型的名字,那么所有的属性就会被定义成为该类型,当我们在初始化的时候在指定其正确的类型即可.来看看下面的代码.
package test.DrawFrame;
/**
* @author hackbase Java的范型的理解
* 在这里我们给成员属性定义了泛型.
*/
public class TestDemo2<T> {
T over;
public static void main(String[] args) {
TestDemo2<Boolean> d1 = new TestDemo2();
d1.setOver(true);
boolean b1 = d1.getOver();
System.out.println(b1);
TestDemo2<Integer> d3 = new TestDemo2<>();
d3.setOver(123);
int d4 = d3.getOver();
System.out.println(d4);
}
//添加get set方法。
public T getOver() {
return over;
}
public void setOver(T over) {
this.over = over;
}
}
在这里,我们看到的 就是我们的over类型被指定为Boolean以及Integer类型。那么将该类型进行拆箱操作的时候,那么左边的就会只能时整数的类型,不能定义其他的基本的数据类型,否则编译器就会报错.因为也是无法定义的。
其次要注意的就是,我们可以在尖括号后面写多个泛型,并且泛型不能时一个常见的数据类型,以及泛型通常时大写的