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

Java中扩展HashMap报错:MyRecord类型不接受参数

让我来帮你梳理下这个问题的根源,以及对应的解决办法:

问题出在哪?

你定义的MyRecord类继承的是HashMap<String, String>——这是一个已经绑定了具体泛型类型的HashMap实现,也就是说MyRecord本身并不是一个泛型类,它的键值类型已经固定死是String了。所以当你尝试用MyRecord<String, String>来声明ArrayList的元素类型时,编译器自然会报错“MyRecord类型不接受参数”,因为它根本不是泛型类,不需要(也不能)传泛型参数。


两种修复方案,你可以根据需求选:

方案1:如果MyRecord确实只需要存储<String, String>类型的键值对

直接去掉声明时的泛型参数即可,同时可以优化下构造函数(你原来的第一个构造函数传了k和v但没存进去,有点浪费参数):

// 优化后的MyRecord类
public class MyRecord extends HashMap<String, String>{
    // 直接把传入的k-v存入Map
    public MyRecord(String k, String v){ 
        super();
        put(k, v);
    }
    public MyRecord(Map<String, String> t) { 
        super(t); 
    }
    public String getVal(String key) { 
        return this.get(key); 
    }
}

// 正确的ArrayList声明
ArrayList<MyRecord> dataList = new ArrayList<>();

方案2:让MyRecord支持自定义泛型类型(更灵活)

如果你希望MyRecord能像原生HashMap一样支持任意的键值类型,那就把MyRecord改成泛型类,继承泛型版本的HashMap<K, V>:

// 泛型版MyRecord类
public class MyRecord<K, V> extends HashMap<K, V>{
    public MyRecord(K k, V v){ 
        super();
        put(k, v);
    }
    public MyRecord(Map<? extends K, ? extends V> t) { 
        super(t); 
    }
    public V getVal(K key) { 
        return this.get(key); 
    }
}

// 你原来的声明现在就能正常用了
ArrayList<MyRecord<String, String>> dataList = new ArrayList<>();

内容的提问来源于stack exchange,提问作者me_digvijay

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:35:44