2011-09-06 81 views
1

我试图用一些实用方法创建自己的HashMap版本。Java:无法实例化Foo类型

Foo.java

import java.util.HashMap; 

public class Foo<String, Parameter> extends HashMap<String, Parameter> { 

    public Foo() { 
     super(); 
    } 

    public Parameter Add(String key, MyType type) { 
     return put(key, new Parameter(type)); // -> This line causes compilation error 
    } 
    } 

下面的行:

new Parameter(type); 

产生Cannot instantiate the type Foo

我查了Parameter类,它不是抽象类/接口,为什么我得到这个错误?

编辑
更改类声明如下解决了这个问题:

public class Foo extends HashMap<String, Parameter> { 
+0

“MyType”的类型是什么? – medopal

+0

你可以发布Parameter类的代码吗?至少是构造函数?我想知道为什么在Foo上实例化参数失败。 –

+0

问题解决了。请参阅下面的答案。 – Caner

回答

7

它不是一个抽象类 - 这是目前一个类型参数,如String!你的类是通用的,有两个类型参数。我相信你的意思是:

public class Foo extends HashMap<String, Parameter> { 

现在它是一个非泛型类。

3

类声明应该是

public class Foo extends HashMap<String, Parameter> { 

但它几乎总是一个坏主意来扩展HashMap。您应该使用而不是 a Map实例。此外,方法应始终以Java中的小写字母开头。