Java之泛型引入

文章讨论了在Java中创建多个相似对象但成员变量类型不同的问题,以及两种常见的解决方案的缺点。通过引入泛型,可以在编译时检查类型安全,避免类的膨胀并提高代码的重用性。泛型允许类型参数化,使得一个类可以处理多种数据类型,同时保持强类型检查。
摘要由CSDN通过智能技术生成

引入

如果需要产生多个对象,每个对象逻辑一样,只是对象内的成员变量类型不同,如何做?

创建多个类,给每一个类成员设置指定数据类型

缺点:会导致类的膨胀,重用性太差

例如:

class Cls1{
	int a;
	public Cls1(int a){
		this.a = a;
	}
	public int getData(){
		return a;
	}
}

class Cls2{
	String a;
	public Cls2(String a){
		this.a = a;
	}
	public String getData2(){
		return a;
	}
}

public class Test {
	public static void main(String[] args) {	
		Cls1 c1 = new Cls1(10);
		System.out.println(c1.getData());
		
		Cls2 c2 = new Cls2("xiao");
		System.out.println(c2.getData2());
	}
}
  • 创建一个类,给这个类成员变量设置Object数据类型
    缺点:编译正常,运行时可能会异常
class Cls3{
	Object a;
	public Cls3(Object a){
		this.a = a;
	}
	public Object getData(){
		return a;
	}
}

public class Test {
	public static void main(String[] args) {	
		Cls3 c1 = new Cls3(10);
		System.out.println(c1.getData());
		
		Cls3 c2 = new Cls3("xiao");
		System.out.println(c2.getData());
		
		System.out.println((Integer)c2.getData());//编译正常,运行异常
	}
}

针对以上2个的缺点,于是引入了泛型


class Cls1<T>{
	T a;
	public Cls1(T a){
		this.a = a;
	}
	public T getData(){
		return a;
	}
}


public class Test {
	public static void main(String[] args) {
		Cls1<Integer> cls1 = new Cls1<Integer>(10);
		System.out.println(cls1.getData());
		
		Cls1<String> cls2 = new Cls1<String>("法外狂徒");
		System.out.println(cls2.getData());
	}
}

运行结果如下

在这里插入图片描述

泛型简介

  • JDK1.5后引入
  • 泛型可以在编译的时候检查类型安全,并且所有的强制转换都是自动和隐式的。
  • 泛型的原理就是“类型的参数化",即把类型看做参数。也就是说把所要操作的数据类型看做参数,就像方法的形式参数是运行时传递的值的占位符一样。
  • 简单的说,类型变量扮演的角色就如同一个参数,它提供给编译器用来类型检查的信息。
  • 泛型可以提高代码的扩展性和重用性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值