泛型--前世今生

简介: 1、什么是泛型?   泛型:任意的类型。是一种把明确数据类型的工作放在了创建对象或者调用方法时候进行的特殊的类型,一般只应用在集合里。   泛型的格式:<数据类型>,举例如下: ArrayList<String> array = new ArrayList<String>(); 2、为什么有泛型?泛型有什么好处?  


1、什么是泛型?


  泛型:任意的类型。是一种把明确数据类型的工作放在了创建对象或者调用方法时候进行的特殊的类型,一般只应用在集合里。

  泛型的格式:<数据类型>,举例如下:

ArrayList<String> array = new ArrayList<String>();



2、为什么有泛型?泛型有什么好处?


  为什么有泛型:我们知道,数组只能存储一种数据类型;集合可以存储任意类型的对象,但是我只想让我的存储一种类型,不想让其他类型存进去,怎么解决呢?

  这时候就要用泛型了,泛型就是模仿数组限定存入数据类型而来的,在定义集合的时候,告诉集合,限定集合只能存储什么类型的元素(如果不明确指定则默认是object类型)。以上面泛型举例,ArrayList<String> array = new ArrayList<String>();就是限定集合array只能存入string类型数据。

  泛型的好处:

    (1)解决了虚拟机黄色警告问题,因为如果不加泛型的话,虚拟机会认为存在因操作失误存入非正常数据的可能,而报出黄色警告。

    (2)把运行期间的类型转换异常提前到了编译期间,定义泛型之后,如果存入非泛型规定类型数据,虚拟机会报错而导致编译不通过。

    (3)优化程序设计,使得代码更清晰。



3、什么时候使用泛型?


  如果类或者接口后面有 < > ,那么这就是泛型的体现。它就是要你在使用的时候明确类型,这时候就可以使用泛型了。



4、泛型的种类?


  泛型一般的用法有泛型类、泛型方法、泛型接口。


  (1)泛型类


    顾名思义,泛型类就是把泛型定义在类上。举例如下:

public class Tool2<E> {  // 泛型不明确类型则默认object类型
	
	private E temp;

	public void show(E e) {
		System.out.println( 胡根得 );
	}
}
    定义成这样,说明方法传递的参数必须和泛型类的类型一致,这时候,泛型类的使用方法如下:

<span style="font-size:14px;">public class Tool2Test {
	public static void main(String[] args) {

		Tool2<String> t = new Tool2<String>(); //泛型类定义成string类型
		t.show("hello");

		Tool2<Integer> t2 = new Tool2<Integer>(); //泛型类定义成Integer类型
		t2.show(10);
	}
}</span>

  

  (2)泛型方法


    从上边可以知道,我们用泛型类可以使得泛型类的方法传递不同类型的参数(上面分别传递了string和Integer类型),但是我们需要在泛型类和其方法上都加上泛型。那么,我们能不能在调用方法的时候,才去明确类型呢?

    这就用到了泛型方法,泛型方法就是把泛型加在方法上。举例如下:

public class Tool {

	//泛型方法
	public <E> void show(E e) { //没有指定,所以默认object类型均可
		System.out.println( 胡根得 );
	}
}
    使用的时候:

public class ToolTest {
	public static void main(String[] args) {

		//不用在类上也加上泛型啦!
		Tool t = new Tool();

		t.show("hello");
		//真正实现了一个方法,传递多种参数,比方法重载简单多了
		t.show(10);
	}
}
 

  (3)泛型接口


    把泛型加在接口上。泛型接口有什么特点呢?

    首先定义一个泛型接口:

//定义泛型接口
public interface Inter<BMW> { //没有指定类型,默认为object类型
	public abstract void show(BMW bmw);
}
    定义类实现这个接口:

  (1)在写实现类的时候,已经知道接口上应该是什么类型了,例如应该是string类型:

//直接加上类型string
public class InterImpl implements Inter<String> { //在泛型处指定string类型
	@Override
	public void show(String bmw) {
		System.out.println(bmw);
	}
}

    调用方式:

public class InterTest {
	public static void main(String[] args) {
		// 方式1测试
		 InterImpl ii = new InterImpl(); //直接创建对象
		 ii.show("hello");
	}
}

  (2)在写实现类的时候,不知道接口上应该是什么类型:

public class InterImpl<BWM> implements Inter<BWM> {//这时候类上的泛型仍然用父接口中的bwm类型
	@Override
	public void show(BWM bmw) {
		System.out.println(bmw);
	}

    调用方式:

public class InterTest {
	public static void main(String[] args) {

		// 方式2测试,调用的时候才定义类型
		InterImpl<String> ii = new InterImpl<String>(); //需要用泛型类的方式创建对象
		ii.show("hello");
	}
}
 
  小结:
泛型属于新特性,是高新类技术,在很多方面多有用处。既可以规定必须用哪种类型,又可以代替方法重载,传递多种参数。 

目录
相关文章
|
9月前
|
安全 编译器 Scala
何时需要指定泛型:Scala编程指南
本文是Scala编程指南,介绍了何时需要指定泛型类型参数。泛型提供代码重用和类型安全性,但在编译器无法推断类型、需要提高代码清晰度、调用泛型方法或创建泛型集合时,应明确指定类型参数。通过示例展示了泛型在避免类型错误和增强编译时检查方面的作用,强调了理解泛型使用时机对编写高效Scala代码的重要性。
58 1
何时需要指定泛型:Scala编程指南
|
9月前
|
存储 Java
什么是泛型, 泛型的具体使用?
什么是泛型, 泛型的具体使用?
|
Java
泛型讲解
本章讲解了什么是泛型以及泛型擦除相关的知识点
98 1
|
存储 安全 Java
泛型的相关知识
泛型的相关知识
|
存储 Java 编译器
对泛型的认识
对泛型的认识
|
安全 JavaScript Java
泛型中的 T、E、K、V、?等等,究竟是啥?
泛型中的 T、E、K、V、?等等,究竟是啥?
泛型中的 T、E、K、V、?等等,究竟是啥?
|
安全 Java 编译器
第10章 泛型
泛型是什么,以及泛型怎么用。
133 0
|
存储 开发框架 安全
一文搞定泛型知识
一文搞定泛型知识
112 0
|
Java 编译器 安全
关于泛型,你可能不知道的事儿
型没有其看起来那么深不可测,它并不神秘与神奇。泛型是 Java 中一个很小巧的概念,但同时也是一个很容易让人迷惑的知识点,它让人迷惑的地方在于它的许多表现有点违反直觉。
1594 0
|
安全 Java 编译器
java基础巩固-详解泛型
java泛型(generics)为jdk5引入的新特性,泛型提供了编译时类型安全检测机制,可以在编译时检测到非法的类型。 泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。
1415 0

热门文章

最新文章