Java泛型(泛型类、泛型方法、泛型接口)

泛型引入

如果我们需要产生多个对象,每个对象的逻辑完全一样,只是对象内的成员变量的类型不同,那我们如何去做?
此时,我们就引入了泛型。

泛型:让数据类型变得参数化。定义泛型时,对应的数据类型是不确定的。泛型方法被调用时,才指定具体类型
这样就解决了多个相似的类(方法、接口 )创建的问题,一个泛型类即可代替所有相关类(方法、接口),提高代码的重用性

1. 泛型类特点

  • 泛型的类型参数可以是泛型类
  • 泛型类可是同时设置多个类型参数
  • 泛型类可以继承泛型类
  • 泛型类可以实现泛型接口

2. 最简单泛型类

泛型类:
在这里插入图片描述
调用泛型类时才指定具体类型:
在这里插入图片描述

3. 泛型方法

3.1 定义泛型方法
  • 定义格式:
访问修饰符 <泛型列表> 返回类型 方法名(参数列表) {
		实现代码;
}
  • 在泛型列表中声明的泛型,可用于该方法的返回类型声明、参数类型声明和方法代码中的局部变量的类型声明
  • 类中的其他方法不能使用当前方法声明的泛型

注意: 是否拥有泛型方法,与其所在的类是否是泛型没有关系,要定义泛型方法,只需将泛型参数列表置于返回值前

示例:

package com.demo;

class Parent {
	//泛型方法
	public <T> void printInfo(T a) {
		System.out.println(a);
	}
	//重载泛型方法
	public <T, T2> T2 printInfo(T a, T2 b) {
		System.out.println(a);
		System.out.println(b);
		return b;
	}
}

public class Test {
	public static void main(String[] args) {
		Parent one = new Parent();
		one.printInfo("hello");
		one.printInfo("hello", 10);
	}
}

结果:
在这里插入图片描述

3.2 使用extends关键字限制泛型类型

格式:

访问修饰符 <泛型 extends A> 返回类型 方法名(参数列表) {
		实现代码;
}

此时泛型的类型就只能是 A 类或者 A 的子类

示例:

package com.demo;

class Parent {
	void print() {
		System.out.println("上限为父类");
	};
}

class Child extends Parent {
	//重写方法
	void print() {
		System.out.println("下限为子类");
	}
}

class User{
	//泛型方法
	public <T extends Parent> void printInfo(T t) {
		t.print();
	}
}

public class Test {
	public static void main(String[] args) {
		User one = new User();
		one.printInfo(new Child());
		one.printInfo(new Parent());
	}
}	

结果:
在这里插入图片描述

3.3 静态泛型方法

使用static进行修饰

示例:

package com.demo;

class Parent {
	void print() {
		System.out.println("上限为父类");
	};
}

class Child extends Parent {
	//重写方法
	void print() {
		System.out.println("下限为子类");
	}
}

class User{
	//静态泛型方法
	public static <T extends Parent> void printInfo(T t) {
		t.print();
	}
}

public class Test {
	public static void main(String[] args) {
		User one = new User();
		//静态泛型方法通过实例化对象去动态调用会出现警告
		one.printInfo(new Child());	
		one.printInfo(new Parent());
		//静态调用则不会出现警告
		User.printInfo(new Child());
	}
}

结果:在这里插入图片描述

4. 泛型接口

在这里插入图片描述

5. 泛型类可是同时设置多个类型参数

在这里插入图片描述

6. 泛型的类型参数可以是泛型类

在这里插入图片描述
注意:第一个getMessage() 获取的是泛型类,第一个获取的是 getMessage() 获取的才是整数a的值

7. 泛型类可以继承泛型类

在这里插入图片描述

8. 泛型类可以实现泛型接口

在这里插入图片描述

  • 5
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值