15.4.1 杠杆利用类型参数判断

利用之前提到的方法泛型的自动推断, 可以对一些泛型容器声明进行一些简化, 如下:

package com.cnsuning.src;

import java.lang.reflect.*;
import java.util.*;

public class Main {
	public static void main(String[] args) {
//		Map<Integer,String> map = new map<Integer,String>();
		Map<Integer,String> map = New.map();
//		List<String> list = new LinkedList<String>();
		List<String> list = New.linkedList();
		list.add("test1");
		list.add("test2");
		for(String test:list){
			System.out.println(test);
		}
	}
}

class New{
	public static <T> LinkedList<T> linkedList(){
		return new LinkedList<T>();
	}
	public static <T,V> Map<T,V> map(){
		return new HashMap<T,V>();
	}
}
虽然进行了写法上的简化, 但同时别人阅读代码时也增加了理解New工具类的时间.

同时需要注意的是要利用返回值的类型自动推断时, 返回值必须是用于赋值, 其它如作为参数传递等情形编译器不会自动推断, 会出现错误导致程序运行失败.

如果不能根据类型自动推断确定泛型, 就需要用到显式类型说明:

package com.cnsuning.src;

import java.lang.reflect.*;
import java.util.*;

public class Main {
	public static void main(String[] args) {
//		Map<Integer,String> map = new map<Integer,String>();
		Map<Integer,String> map = New.map();
//		setList(New.linkedList()); 这样写导致编译报错
		setList(New.<String>linkedList());
	}
	private static void setList(List<String> list){
		;
	}
}

class New{
	public static <T> LinkedList<T> linkedList(){
		return new LinkedList<T>();
	}
	public static <T,V> Map<T,V> map(){
		return new HashMap<T,V>();
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值