欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

黑马程序员-泛型入门

程序员文章站 2022-03-13 12:08:00
...

----------- 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());
	}
}

 上面是泛型类的声明。

当然泛型的构成还有接口和方法的声明,和泛型构造器的声明

泛型接口

一个接口可以有多个类型变量,类型变量有<>括起来,放在接口名的后面

 

 

public interface List<T> extends Collection<T>

{

   .....
  }

 

----------- android培训java培训、java学习型技术博客、期待与您交流! ------------

 

相关标签: 泛型