Java中泛型T的用法

01-描述

T表示:返回值T是泛型,T只是一个占位符,用来告诉编译器,这个东西先给我留着,等我编译的时候再告诉你是什么类型。

02-用法

第一种用法:

Demo类的getListFisrt方法可以接受任意类型List参数。

package com.eleven.csdn0115;

import java.util.ArrayList;
import java.util.List;

/**
 * <T> T表示:返回值T是泛型,T只是一个占位符,用来告诉编译器,这个东西先给我留着,等我编译的时候再告诉你是什么类型。
 * 
 * @author sywangu
 *
 */
public class Demo {
	public static void main(String[] args) {
		Demo demo = new Demo(); // 创建一个demo对象

		// 获取String类型
		List<String> array = new ArrayList<String>(); // 创建一个ArrayList数组
		array.add("a");
		array.add("b");

		demo.getListFirst(array); // Demo类的getListFisrt方法可以接受任意类型List参数
		System.out.println(array);	// 打印出的结果是[a, b]

		// 获取Number类型
		List<Integer> nums = new ArrayList<Integer>();
		nums.add(12);
		nums.add(13);

		demo.getListFirst(nums);
		System.out.println(nums);	// 打印出的结果是[12, 13]
	}

	/**
	 * <T> T 表示可以传入任何类型 参数T 
	 * 第一个T表示泛型 
	 * 第二个T表示返回的是T类型的数据 
	 * 第三个T限制参数类型为T
	 * 
	 * @param data
	 * @return
	 */
	private <T> T getListFirst(List<T> data) {
		if (data == null || data.size() == 0) {
			return null;
		}
		return data.get(0);
	}

}
第二种用法:

Demo2类在初始化的时候已经限定了T的类型,所以getListFirst方法只能接受List类型的参数。

package com.eleven.csdn0115;

import java.util.ArrayList;
import java.util.List;

/**
 * 单独T的用法
 * 
 * @author sywangu
 *
 */
public class Demo2<T> {
	public static void main(String[] args) {
		// 获取String类型
		Demo2<String> demo = new Demo2<>();	// 限制"T"的类型为String
		
		List<String> array = new ArrayList<String>();	// 返回的类型是String
		array.add("a");
		array.add("b");
		
		String str =demo.getListFirst(array);	// 返回的类型是String
		System.out.println(array);	// 打印出的结果是[a, b]
		
		// 获取Number类型
		Demo2<Integer> demo2 = new Demo2<Integer>();	// 限制"T"的类型为String
		
		List<Integer> nums = new ArrayList<Integer>();	// 返回Integer类型
		nums.add(1);
		nums.add(2);
		
		Integer num = demo2.getListFirst(nums);	// 返回的类型是Integer
		System.out.println(nums);	// 打印出的结果是[1, 2]
		
	}

	/**
	 * 通用方法
	 * @param data
	 * @return
	 */
	private T getListFirst(List<T> data) {
		if(data == null || data.size() == 0) {
			return null;	
		}
		return data.get(0);
	}
}
泛型Java编程语言的一个功能,它允许在定义类、接口和方法时使用类型参数。泛型的主要目的是为了提供更强的类型检查和消除代码的类型转换。泛型可以用在类、接口、方法和构造器,并且可以应用于任何类型,括基本类型。 泛型的基本用法可以分为以下几类: 1. 泛型类和接口 使用泛型类和接口可以编写更为通用的代码,不依赖于指定的具体数据类型。例如: ```java public class Box<T> { private T t; // T stands for "Type" public void set(T t) { this.t = t; } public T get() { return t; } } ``` 在这个例子,`Box<T>`是一个泛型类,`T`是一个类型变量,表示该类的实例可以存储任何类型的对象。 2. 泛型方法 泛型方法可以在普通的非泛型定义。例如: ```java public class Util { public static <K, V> boolean compare(Pair<K, V> p1, Pair<K, V> p2) { return p1.getKey().equals(p2.getKey()) && p1.getValue().equals(p2.getValue()); } } ``` 这个`compare`方法使用了两个类型参数`K`和`V`,并应用于`Pair<K, V>`类型的参数。 3. 泛型通配符 泛型通配符`<?>`用于创建那些可以工作于多种不同数据类型的泛型类或方法。例如: ```java public void processElements(List<?> elements) { for(Object element : elements) { // do something with element } } ``` 在这里,`processElements`方法可以处理任何类型的`List`对象。 4. 类型通配符的界限 使用`extends`关键字定义泛型类型的上界,用于限制泛型变量的类型。例如: ```java public class Processора<T extends Number> { public void process(T element) { // do something with T } } ``` `Processora<T>`类泛型类型`T`只能是`Number`或其子类。 5. 泛型的类型擦除 Java泛型是通过类型擦除来实现的,这意味着在运行时,泛型信息将不会存在。所有的泛型信息在编译器编译时会被擦除。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值