黑马程序员-泛型入门
----------- android培训、java培训、java学习型技术博客、期待与您交流! ------------
Java泛型由来的动机
理解Java泛型最简单的方法是把它看成一种便捷语法,能节省你某些Java类型转换(casting)上的操作:
1 |
List<Apple> box = ...; |
2 |
Apple apple = box.get( 0 ); |
上面的代码自身已表达的很清楚:box是一个装有Apple对象的List。get方法返回一个Apple对象实例,这个过程不需要进行类型转换。没有泛型,上面的代码需要写成这样:
1 |
List box = ...; |
2 |
Apple apple = (Apple) box.get( 0 ); |
很明显,泛型的主要好处就是让编译器保留参数的类型信息,执行类型检查,执行类型转换操作:编译器保证了这些类型转换的绝对无误。
我们在联系集合时,经常会有这样的错误:
--------------------配置: <默认>--------------------
注意: D:\TDDOWNLOAD\javawork\java集合\Collection和Iteraror接口\TestIterator.java 使用了未经检查或不安全的操作。
注意: 要了解详细信息,请使用 -Xlint:unchecked 重新编译。
----------------------------------------------------------------------------------------------------------------------------------
这就是编译器提醒我们执行类型检查,否则box 编译就变成Object类型,需要强制转换。
现在我们来一段代码加深理解:泛型类的声明:
public class Apple<T>//定义Apple类型时使用泛型声明
{
private T info;//使用T类型形参定义属性
private Apple()
{
}
public Apple(T info)//使T类型形参来定义方法
{
this.info=info;
}
public void setInfo(T info)
{
this.info=info;
}
public T getInfo()
{
return this.info;
}
public static void main(String[] args)
{
//传给T形参的是String实际类型,所以构造器的参数只能是String
Apple<String> a1=new Apple<String>("苹果");
System.out.println(a1.getInfo());
//传给T形参的是Double实际类型,所以构造器的参数只能是Double
Apple<Double> a2=new Apple<Double>(5.67);
System.out.println(a2.getInfo());
}
}
上面是泛型类的声明。
当然泛型的构成还有接口和方法的声明,和泛型构造器的声明
泛型接口
一个接口可以有多个类型变量,类型变量有<>括起来,放在接口名的后面
|
----------- android培训、java培训、java学习型技术博客、期待与您交流! ------------
上一篇: mysql怎么查询每个表有多少条记录
下一篇: mysql怎么查询最近7天的数据