Java高级 —— 泛型

Posted 行稳方能走远

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java高级 —— 泛型相关的知识,希望对你有一定的参考价值。

泛型概念

  • 问题引入:如果我们需要产生多个对象,每个对象的逻辑完全一样,只是对象内的成员啊变量的类型不同。那我们如何去做?两种解决办法:

在这里插入图片描述
方法一:

class Cls1
{
	int a;
	
	public Cls1(int a){//构造方法
		this.a = a;
	}
	
	public int getData(){
		return a;
	}
}

class Cls2
{
	String b;//仅仅类型不同 小数、浮点数... 类的膨胀,重用性差
	
	public Cls2(String b){//构造方法
		this.b = b;
	}
	
	public String getData(){
		return b;
	}
}

public class test {
	public static void main(String[] args) {
		Cls1 cls1 = new Cls1(10);
		System.out.println(cls1.getData());
		Cls2 cls2 = new Cls2("你好呀!");
		System.out.println(cls2.getData());
	}

}

方法二:

class Cls1
{
	Object a;//Object是所有数据类型的父类
	
	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);         //1.5版本以下运行出错,询问回复int不是类,是数据类型,String是类
		System.out.println(cls1.getData());//Integer才是类
		Cls1 cls2 = new Cls1("你好呀!");
		System.out.println(cls2.getData());
		//System.out.println((int)cls2.getData());这样强制转换 编译通过但运行出错!ppt有讲
	}

}

这里可以使用泛型的解决方法:
创建工程时选择1.5版本JDK及以上

在这里插入图片描述

class Cls1<T>
{
	T a;//Object是所有数据类型的父类
	
	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());
	}

}

泛型可设置多个类型参数

在这里插入图片描述
在这里插入图片描述

泛型继承和泛型接口

限制泛型可用类型

泛型通配的方式

泛型方法

泛型方法限制泛型可用类型

以上是关于Java高级 —— 泛型的主要内容,如果未能解决你的问题,请参考以下文章

Java——泛型

JAVA高级--java泛型

Java这个泛型高级特性,很多人还没用过!

Java高级——泛型

Java高级 —— 泛型

Java入门 - 高级教程 - 03.泛型