Java泛型

泛型类/接口

格式:

 【修饰符】 class/interface 类名/接口名<泛型形参 extends 泛型形参父类>{
    
}
  • 泛型形参 必须<=泛型形参父类
  • 泛型类中或泛型接口的泛型形参,不能用于声明静态方法或静态变量
泛型实参的要求
  • 泛型实参不能是基本数据类型,只能是引用数据类型
设定泛型形参的上限:
  • <T extends 父接口上限> ex:
泛型方法

某些特殊情况下:需要单独声明泛型方法

  1. 静态方成员上,不能使用泛型类或泛型接口上的泛型形参的
  2. 类中某个方法需要用到泛型,但是类不是泛型类,泛型接口
语法格式
【修饰符】<泛型形参列表> 返回值类型 方法名 (【形参列表】) 【throws 形参列表】
其他
数组工具类:java.util.Arrays
import java.util.Arrays;

public class TestGenericMethodUse {
	public static void main(String[] args) {
		java.util.List<String> asList = Arrays.asList("hello","world","java");
		asList.add("123");//asList的数组为只读数组,不能改变,会抛出异常
		for (String string : asList) {
			System.out.println(string);
		}
	}
}
泛型的上限
class Student<T extends number>{}
  • 定义上限后,只能是父类本身或其子类
定义多个上限: class student<T extends number & java.io.Serializable>
  • 为类型形参指定上限:必须在类上限第一位
设定泛型形参的上限
public static <T extends Graphic> void printArea(List<T> graphics){}
类型通配符:

在声明方法时,又不确认方法的实际类型,可以使用通配符

public static void test(List<?> c,String str){}
泛型与通配符的区别:

在不添加元素到结合中时,两个效果相同,通配符不支持集合添加元素

设定通配符的下限
public static <T> void copy(Collection<T> dest,Collection<? extends T> src){}
<? super Type>,这个通配符表示它必须是Type本身或是Type的父类
  • 泛型方法不支持方法重载
  • instanceof后面不支持泛型
  • 泛型不支持创建数组对象
  • try…catch 后不能使用泛型表示
泛型擦除

默认是该类型形参的第一个上限(如果没有上限,默认就是Object)。

Collections工具类
boolean addAll(Collection<? super T>c, T...elements)
public static <T> int binarySearch(List<? extends Comparable<? super T>> list,T key)
public static <T> void copy(List<? super T> dest, List<? extends T> src)
public static <T extends Object & Comparable<? super T>> T min(Collection<? extends T> coll)
public static <T> void sort(List<T> list, Comparator<? super T> c)
  		public static <T extends Comparable<? super T>> void sort(List<T> list)
synchronized开头的方法:可以让线程不安全的方法变为线程安全的方法
unmodifiable开头的方法:表示把一个可变集合变为只读集合
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值