`
yjf997234900.
  • 浏览: 7072 次
  • 性别: Icon_minigender_2
  • 来自: 武汉
最近访客 更多访客>>
社区版块
存档分类
最新评论

黑马程序员-泛型入门

    博客分类:
  • JAVA
阅读更多

----------- 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学习型技术博客、期待与您交流! ------------

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics