Java如何创建存储Class对象的HashMap及解决编译报错
问题解答
存储Class<?>类型对象的HashMap是完全可以正常实现、编译运行的,你遇到的所有编译报错都和HashMap定义无关,是获取Class对象的语法不符合Java规范导致的。
错误原因
Java中要拿到某一类型对应的Class实例,不能直接在代码里写裸类型名,必须遵循Class字面量的语法规则,你原代码的几个错误分别对应:
- 直接写
String:编译器会把裸写的类名识别为变量名,因此报"String无法解析为变量"的错误 - 直接写
int、String[]:不符合表达式语法,编译器提示需要补充.class后缀 - 直接写
HashMap<String, String>:泛型是编译期校验机制,不参与运行期Class对象的生成,写带泛型参数的类型名会触发语法错误
Java中不同类型获取Class对象的正确规则:
- 普通引用类型:类型名后拼接
.class,例如String.class - 基本数据类型:类型名后拼接
.class,例如int.class(如果需要对应包装类的Class对象则写Integer.class) - 带泛型的类型:直接写原生类型拼接
.class即可,泛型参数不需要写,例如HashMap.class - 数组类型:数组类型名后拼接
.class,例如String[].class
修正后可正常编译的代码
package com.something; import java.util.HashMap; public class ColumnsResultSet { private static HashMap<String, Class<?>> columnTypes = new HashMap<String, Class<?>>(); static { columnTypes.put("TABLE_CAT", String.class); columnTypes.put("COLUMN_SIZE", int.class); columnTypes.put("MAP", HashMap.class); columnTypes.put("ARRAY", String[].class); } }
内容的提问来源于stack exchange,提问作者sunrize531
相关产品推荐
相关产品推荐

