Java - List<?> 泛型

伪代码

public void test(String filePath) {
	// Step 1. convert file to data list
	Map<String, List<?>> map = getUserList(filePath);

	if (map == null) {
		throw new GlobalException("集合为空!");
	}

	List<Apple> appleList = (List<Apple>) map.get("apple");
	List<Banana> bananaList = (List<Banana>) map.get("banana");

	// Step 2. insert data from list to DB
	if (appleList != null) {
		appleMapper.batchInsertApples(appleList);
	}

	if (bananaList != null) {
		bananaMapper.batchInsertBananas(bananaList);
	}
}

private Map<String, List<?>> getUserList(String filePath) {
	Map<String, List<?>> resultMap = new HashMap<>();

	List<Apple> appleList = new ArrayList<>();
	List<Banana> bananaList = new ArrayList<>();

	try {
		FileReader fr = new FileReader(filePath, "UTF-8"); // htool 实现
		List<String> lines = fr.readLines();

		if (lines.size() == 0) {
			return null;
		}

		String[] columnNames = lines.get(0).split("\t"); // 列名

		for (int i = 1; i < lines.size(); i++) { // 每列数据
			List<String> list = Arrays.asList(lines.get(i).split("\t"));

			Map<String, Object> map = new HashMap<>();
			for (int j = 0; j < list.size(); j++) {
				map.put(columnNames[j], list.get(j));
			}

			JSONObject jsonObject = new JSONObject(map);
			userList.add(JSON.toJavaObject(jsonObject, Apple.class));
			userRoleList.add(JSON.toJavaObject(jsonObject, Banana.class));
		}

		resultMap.put("apple", appleList);
		resultMap.put("banana", bananaList);
	} catch (IORuntimeException e) {
		log.error("File doesn't exist.");
		e.printStackTrace();
	}

	return resultMap;
}

Class<T> vs Class<?>

  • Class<T>在实例化的时候,T要替换成具体类
  • Class<?>它是个通配泛型,?可以代表任何类型,主要用于声明时的限制情况

public Class<?> clazz;  --- 正确

public Class<T> clazz; --- 错误

当不知道声明何种类型的Class的时,可以定义一个Class<?>。Class<?>可以用于参数类型定义,方法返回值定义等。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值