无法在Java中扩展和使用HashMap

无法在Java中扩展和使用HashMap,java,extends,Java,Extends,我正在尝试从Java扩展HashMap类,以提供我自己版本的get()方法,如下所示: public class MyRecord extends HashMap<String, String>{ public MyRecord(String k, String v){ super(); } public MyRecord(Map t) { super(t); } public String getVal(S

我正在尝试从Java扩展HashMap类,以提供我自己版本的get()方法,如下所示:

public class MyRecord extends HashMap<String, String>{
    public MyRecord(String k, String v){
        super();
    }

    public MyRecord(Map t) {
        super(t);
    }

    public String getVal(String key) {
        return this.get(key);
    }
}
import java.util.HashMap;
import java.util.Map;

public class MyRecord<K, V> extends HashMap<K, V> {
    public MyRecord(String k, String v) {
        super();
    }

    public MyRecord(Map t) {
        super(t);
    }

    public V getVal(K key) {
        return this.get(key);
    }
}
公共类MyRecord扩展HashMap{
公共MyRecord(字符串k、字符串v){
超级();
}
公共MyRecord(地图t){
超级(t);
}
公共字符串getVal(字符串键){
返回此。获取(键);
}
}
但当我按如下方式使用它时,我得到一个错误:类型MyRecord不带参数

ArrayList<MyRecord<String, String>> dataList = new ArrayList<MyRecord<String, String>>();
ArrayList dataList=new ArrayList();

我做错了什么?

MyRecord
只接受字符串,不接受参数

使用以下命令:
ArrayList dataList=new ArrayList()

如果要使
MyRecord
通用,可以使用
classmyrecord扩展了HashMap{…
MyRecord
确实没有泛型参数

仅仅从泛型类继承并不意味着子类也必须是泛型的。在这种情况下,
MyRecord
继承自
HashMap
。它没有任何泛型参数。比如说,
MyRecord
甚至意味着什么?那种
MyRecord
的映射是常量-
HashMap
。因此存在no点i使其具有任何通用参数

因此,这将很好:

ArrayList<MyRecord> dataList = new ArrayList<>();
现在在类声明中使用了正确的
语法,
MyRecord
现在是泛型的

<>但是,您的<代码> MyReals>代码>几乎与< HashMap > <代码>完全相同,也许您应该考虑创建一个包含<代码> HashMap < /代码>的类,而不是继承它?


这篇文章可能也有帮助:

实际上,您不需要在自定义类中传递模板参数 您可以直接创建对象,如:

ArrayList<MyRecord> dataList = new ArrayList<>();
ArrayList dataList=new ArrayList();

因为您已经通过了扩展时的硬编码。

您需要使MyRecord类也具有通用性,如下所示:

public class MyRecord extends HashMap<String, String>{
    public MyRecord(String k, String v){
        super();
    }

    public MyRecord(Map t) {
        super(t);
    }

    public String getVal(String key) {
        return this.get(key);
    }
}
import java.util.HashMap;
import java.util.Map;

public class MyRecord<K, V> extends HashMap<K, V> {
    public MyRecord(String k, String v) {
        super();
    }

    public MyRecord(Map t) {
        super(t);
    }

    public V getVal(K key) {
        return this.get(key);
    }
}
import java.util.HashMap;
导入java.util.Map;
公共类MyRecord扩展HashMap{
公共MyRecord(字符串k、字符串v){
超级();
}
公共MyRecord(地图t){
超级(t);
}
公共V getVal(K键){
返回此。获取(键);
}
}
然后它将适用于您的声明:

import java.util.ArrayList;

public class MyRecordRunner {
    public static void main(String[] args) {
        ArrayList<MyRecord<String, String>> dataList = new ArrayList<MyRecord<String, String>>();
    }
}
import java.util.ArrayList;
公共类MyRecordRunner{
公共静态void main(字符串[]args){
ArrayList dataList=新的ArrayList();
}
}

因为type
MyRecord
没有任何参数,并且您已经在构造函数中传递了它
MyRecord
阅读本文,您可能正在查找
MyRecord extensed HashMap