java泛型详解

目录

一、概念

二、好处

1、类型安全

2、消除强制类型转换

三、分类

1、泛型类

2、泛型接口

3、泛型数组


一、概念

泛型在java中有很重要的地位,并且编程中也是非常常见的,在面向对象编程及各种设计模式中有非常广泛的应用。

泛型就是变量类型的参数化。也就是说,所操作的数据类型被指定为一个参数,这种参数类型可以用在类、接口和方法中,分别称为泛型类、泛型接口和泛型方法。

泛型在集合中的使用

//创建集合并指定泛型,约束集合只能存储String类型的数据
List<String> list = new ArrayList<String>();

//集合只能添加字符串类型的数据
list.add("AA");
list.add("true");
list.add("100");
//....

//获取集合中的元素,直接使用泛型类型接收数据即可,不需要强制类型转换
String str1 = list.get(0) ;
String str2 = list.get(1) ;
String str3 = list.get(2) ;

System.out.println(str1);
System.out.println(str2);
System.out.println(str3);

不使用泛型

//创建集合,但并没有指定泛型
List list = new ArrayList();

//集合可以添加任意类型的数据
list.add("AA");
list.add(true);
list.add(100);
//....

//获取集合中的元素,默认为Object类型,强制转换为相应的数据类型
String str1 = (String)list.get(0) ;
Boolean str2 = (Boolean)list.get(1) ;
Integer str3 = (Integer)list.get(2) ;

System.out.println(str1);
System.out.println(str2);
System.out.println(str3);

 

二、好处

1、类型安全

指定具体类型后,Java编译器会对错误的类型在编译时被捕获,而不是在运行时当作ClassCastException展示出来。从而提高程序的安全性和可靠性。

List<String> list = new ArrayList<String>() ;

list对象只能存放String对象,否则会编译出错

2、消除强制类型转换

//需要强制类型转换
List list = new ArrayList() ;
String str = (String)list.get(0) ;

//不需要类型转换
List<String> list = new ArrayList<String>() ;
String str = list.get(0) 

 

三、分类

1、泛型类

1)语法

[访问修饰符] class 类名<泛型1,泛型2,...> {
    泛型1 泛型成员1 ;
    泛型2 泛型成员2;
    ...
}

例子

//定义一个泛型
public class People<A> {
	private String name;
	private String sex;
	private A pet;
}

//定义多个泛型
public class People<A,B> {
	private String name;
	private String sex;
	private A pet;
  private B phone ;
}

2、泛型接口

1)语法

[访问修饰符] interface 接口名<泛型1,泛型2,...> {
  泛型1 泛型成员1 ;
  泛型2 泛型成员2 ;
  ...

案例演示:

/**
 * 第一:定义泛型接口
 */
public interface GenericTest<T> {
	// 1. 常量
	public static final String name = "AAA";

	// 2.抽象方法
	public void sayHello(T sth);
}


/**
 * 第二:实现接口
 * 当实现泛型接口时,必须指定具体的数据类型
 */
public class GenericTestIntegerImpl implements GenericTest<Integer> {

	@Override
	public void sayHello(Integer sth) {
		System.out.println("你好,"+sth);
	}
}

/**
 * 第二:实现接口
 * 当实现泛型接口时,必须指定具体的数据类型
 */
public class GenericTestStringImpl implements GenericTest<String> {

	@Override
	public void sayHello(String sth) {
		System.out.println("你好,"+sth);
	}
}

/**
 * 测试
 * 第三:使用泛型接口
 */
public class MainTest {
	public static void main(String[] args) {
		GenericTest<Integer> gt1 = new GenericTestIntegerImpl() ;
		gt1.sayHello(100) ;
    
    GenericTest<String> gt2 = new GenericTestStringImpl() ;
    gt2.sayHello("张三") ;
	}
}

3、泛型数组

/**
*	第一:定义泛型类,使用泛型定义数组
*/

public class GenericTest<T> {
	T[] arr;

	public T[] getArr() {
		return arr;
	}

	public void setArr(T[] arr) {
		this.arr = arr;
	}
}


/**
* 第二:定义泛型类对象,调用方法,传递数组
*/
public static void main(String[] args) {
		GenericTest<String> gt = new GenericTest<String>() ;
		
		String[] str = {"aa","bb","cc"} ;
		
		gt.setArr(str) ;
		
		String[] arrs = gt.getArr() ;
		for (String s : arrs) {
			System.out.println(s);
		}
	}

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值