Java<>泛型方法

问题:编写一个泛型方法add(),当传入不同数字类型的值时,能够进行加法运算,(如可以传入int、long、float、double类型,但要对传入的值做一定的限定,如必须是数字)。
 
解决:利用泛型编写。

public class GenericAdd {

	// 泛型方法实现两个数相加
	public <T extends Number> double add(T t1, T t2) {
		double sum = 0.0;
		sum = t1.doubleValue() + t2.doubleValue();
		return sum;
	}

	public static void main(String[] args) {
		test();
	}

	public static void test() {
		GenericAdd addTest = new GenericAdd();// 新建GenericAdd类

		int num1 = 3;
		int num2 = 4;
		System.out.println("整数和:" + addTest.add(num1, num2));// 整数相加
		float num3 = 3.0f;
		float num4 = 7.0f;
		System.out.println("浮点数和:" + addTest.add(num3, num4));// 浮点数相加

		double num5 = 99.0;
		double num6 = 1.0;
		System.out.println("双精度浮点数和:" + addTest.add(num5, num6));// 双精度浮点数相加

		long num7 = 300;
		long num8 = 700;
		System.out.println("长整数和:" + addTest.add(num7, num8));// 长整数相加
	}
}


本篇文章来源于 Linux公社网站(www.linuxidc.com)  原文链接:http://www.linuxidc.com/Linux/2012-04/58805.htm

另有一篇JAVA泛型详解的文章,以供参考:http://lichaozhangobj.iteye.com/blog/476911

### Java `<T>` 的作用和使用方法 `<T>` 是 Java 中提供的一种参数化机制,允许在、接口和方法定义通用的,使代码更加灵活和可重用。通过,可以确保安全,同避免强制转换的需要。 #### 作用 的主要作用是**在编译检查安全**,并允许编写通用代码以适应不同的数据。例如,在定义集合,使用可以确保集合中存储的元素一致,从而避免运行的 `ClassCastException` [^3]。 #### 使用方法 ##### 1. 在中使用 定义,可以在名后添加 `<T>` 来声明一个中的成员变量、方法参数及返回都可以使用该。 ```java public class Person<T> { private T info; public T getInfo() { return info; } public void setInfo(T info) { this.info = info; } } ``` 上述代码中,`Person<T>` 是一个,其中 `T` 是一个参数。在实例化,可以指定具体的,如 `Person<String>` 或 `Person<Integer>` [^3]。 ##### 2. 在方法中使用 定义方法,需要在返回前使用 `<T>` 来声明方法可以独立于参数,允许方法在调用动态确定。 ```java public <T> List<T> show(T[] arr) { ArrayList<T> list = new ArrayList<>(); for (T t : arr) { list.add(t); } return list; } ``` 此方法接受一个数组 `T[]`,并将其中的元素添加到 `List<T>` 中返回。调用可以根据传入的数组自动推断出的具体 [^1]。 ##### 3. 在接口中使用似,接口也可以使用定义通用的方法签名。例如: ```java public interface Repository<T> { void save(T entity); T findById(Long id); } ``` 实现该接口的可以指定具体的,如 `Repository<User>`,从而确保所有操作都针对 `User` 进行 [^3]。 ##### 4. 与返回一致性 在某些情况下,需要确保方法的返回与参数一致,此可以使用 `<T> T` 的形式: ```java private <T1> T1 getListFirst(List<T1> data) { if (data == null || data.size() == 0) { return null; } return data.get(0); } ``` 该方法返回的传入的 `List<T1>` 中的元素一致,确保安全 [^4]。 ##### 5. 参数的结合 如果本身已经定义参数,则在方法中可以直接使用该,而无需在方法前再次声明 `<T>`: ```java class SuperClass<T> { public void fromArrayToList(T[] arr, List<T> list) { // 方法体 } } ``` 此中的方法直接使用了定义 `T`,无需额外声明 [^2]。 #### 的优势 - **安全**:在编译即可发现不匹配的错误,避免运行异常。 - **代码复用**:通过,可以编写适用于多种数据的通用逻辑,减少重复代码。 - **避免强制转换**:集合可以直接获取特定的元素,无需进行转换 [^3]。 #### 的限制 - **不能使用基本**:不支持基本(如 `int`、`double`),只能使用其包装(如 `Integer`、`Double`)。 - **运行擦除**:Java是通过擦除实现的,即在运行信息会被擦除,导致无法直接获取的实际 [^1]。 --- ###
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值