java的面向对象基础(6)——高级泛型

本文详细探讨了Java中的泛型,包括泛型类的特点,如类型参数可以是泛型类、设置多个类型参数、继承和实现泛型类/接口。讲解了如何限制泛型类型,类型通配符的使用方式,以及泛型方法的适用场景。通过实例展示了泛型在提高代码安全性和重用性方面的优势。
摘要由CSDN通过智能技术生成

嵌入式之路,贵在日常点滴

                                                                ---阿杰在线送代码

目录

一、泛型简介

二、泛型类及特点

1、泛型的类型参数可以是泛型类

2、泛型类可以同时设置多个类型参数

3、泛型类可以继承泛型类

4、泛型类可以实现泛型接口

三、限制泛型可用类型 

四、类型通配的方式

类型通配声明 例子 

类型通配的方式 

五、泛型方法 

什么时候使用泛型方法,而不是泛型类呢?


问题:如果我们需要产生多个对象,每个对象的逻辑完全一样,只要对象内的成员变量的类型不同,那我们如何去做?

  • 创建多个类文件,给每个类中的成员变量设置指定的数据类型。

        缺点:这种方式会导致类的膨胀,重用型太差。 


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 getData(){
		return a;
	}
}

public class Test {
	public static void main(String[] args) {
		Cls1 cls1 = new Cls1(10);
		System.out.println(cls1.getData());
		
		Cls2 cls2 = new Cls2("ajie");
		System.out.println(cls2.getData());
	}
}

运行结果:

10
ajie 

  • 创建一个类文件,给这个类中的成员变量设置Object数据类型。

       缺点,编译的时候正常,但运行的时候可能会异常。 (因为其类型比较模糊,有时候做了错误得类型转换就会导致运行程序时崩溃,编译没有错误)

鼠标定位到数据类型,右键 选择 Type Hierarchy

观察可以看出Object是所有数据类型的父类

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

public class Test {
	public static void main(String[] args) {
		Cls1 cls1 = new Cls1(10);
		System.out.println(cls1.getData());		
		
		Cls1 cls2 = new Cls1("ajie");
		System.out.println(cls2.getData());
	}
}

为解决此问题,我们引入 泛型

一、泛型简介

  • 泛型可以在编译的时候检查类型安全,并且所有的强制转换都是自动和隐式的。
  • 泛型的原理就是"类型的参数化",即把类型看作参数。也就是说把所要操作的数据类型看作参数,就像方法的形式参数是运行时传递的值的占位符一样。
  • 简单的说,类型变量扮演的角色就如同一个参数,它提供给编译器用来类型检查的信息。
  • 泛型可以提高代码的扩展性和重用性。 
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>("ajie");
		System.out.println(cls2.getData());
	}
}

运行结果:

10
ajie 

myeclipse工程环境出错:Set project compiler compliance settings to '1.5'

解决方案 

二、泛型类及特点

1、泛型的类型参数可以是泛型类

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<Cls1<Integer>> cls1 = new Cls1<Cls1<Integer>>(new Cls1<Integer>(10));
		System.out.println(cls1.getData().getData());		
		
	}
}

运行结果: 

10

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值