Java - List<?> 泛型

伪代码

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

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

	List appleList = (List) map.get("apple");
	List bananaList = (List) 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> getUserList(String filePath) {
	Map> resultMap = new HashMap<>();

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

	try {
		FileReader fr = new FileReader(filePath, "UTF-8"); // htool 实现
		List 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 list = Arrays.asList(lines.get(i).split("\t"));

			Map 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 vs Class

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

public Class clazz;  --- 正确

public Class clazz; --- 错误

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

你可能感兴趣的:(Java,java)