You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 13:12:17