菜鸟笔记之Java泛型

Java泛型

1. 泛型的意义

    Java泛型的出现提高了集合的安全性,Java泛型只存在于编译期,是给编译器检查java语法用的,Java源码编译后形成.class字节码文件时会将泛型擦除掉。因此,带有泛型的集合,仍然可以通过反射的方式将不同类型的值设置进集合。

2.基本术语

    定义泛型:

    ArrayList<E> :E为类型参数变量

    ArrayList<E>:整体称为泛型类型

   泛型的使用:

   new ArrayList<Integer>():Integer即为实际参数类型

   new ArrayList<Integer>():整体称为参数化的类型

3.泛型类型的定义:

      方式一:在方法上进行声明

public class GenericDemo {
	//1.泛型必须先声明才能使用
	//2.<E>即为声明的泛型类型,需放在返回值之前
	public <E> E method1(E e){
		
		return e;
	}
	
	public <E> void method2(E e){
		
	}
	
	public <E> void method3(Class<E> clazz){
		
	}
}

              方式二:在类上进行声明

//1.在类上进行泛型的声明后,在实例方法上就可以直接使用
//2.但静态方法即使类上已经声明过,在方法上仍需声明
public class GenericDemo<E> {
	public  E method1(E e){
		
		return e;
	}
	
	public void method2(E e){
		
	}
	
	public void method3(Class<E> clazz){
		
	}
	//静态方法仍需声明后才能使用
	public  static <E> void method4(E e){
		
	}
}

4.示例

示例1:

public class GenericDemo {
	//对任意类型的数组进行两个元素的交换
	public static <E> void swap(E[] array,int i,int j){
		E temp = array[i];
		array[i] = array[j];
		array[j] = temp;
	}
}
测试:
public class ClientTest {
	public static void main(String[] args) {
		//此处定义的数组需要使用基本类型的包装类
		Integer[] nums = {1,2,3,4,5};
		GenericDemo.swap(nums, 1, 3);
		System.out.println(Arrays.asList(nums));
	}
}
打印结果:


示例2:

public class GenericDemo {
	//对任意类型的数组进行两个元素的交换
	public static <E> void swap(E[] array,int i,int j){
		E temp = array[i];
		array[i] = array[j];
		array[j] = temp;
	}
	//将任意类型的数组进行反转
	public static <E> void reverse(E[] array){
		int start = 0;
		int end = array.length -1;
		while(start<end){
			swap(array, start, end);
			start++;
			end--;
		}
	}
}
测试:

public class ClientTest {
	public static void main(String[] args) {
		//此处定义的数组需要使用基本类型的包装类
		Integer[] nums = {1,2,3,4,5};
		Integer[] nums1 = {1,2,3,4,5,6};
		String[] strs = {"abc","def","ghi","jkl"};
		GenericDemo.reverse(nums);
		GenericDemo.reverse(nums1);
		GenericDemo.reverse(strs);
		System.out.println(Arrays.asList(nums));
		System.out.println(Arrays.asList(nums1));
		System.out.println(Arrays.asList(strs));
	}
}
打印结果:




总结:利用好java泛型会写出优雅的代码,提高代码的重用性。



  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值