Java扩展了Map.entry()而没有泛型

时间:2014-10-31 01:25:03

标签: java generics interface hashmap

我想做的最终是能够运行这个:

HashMap<FooClass> foo;

但是,我无法在此处实施FooClass

我已经尝试了

public class FooClass<String, List<String>> extends Map.Entry<String, List<String>> 

会导致List<String>

出现问题

如果我简化它并尝试

public class FooClass<String, Integer> extends Map.Entry<String, Integer> 

然后我在

处得到没有预期的界面错误
Map.Entry<String, Integer>

因此,如果我将其更改为Map.Entry<>,那么它需要一个标识符。什么是扩展Map.entry的正确方法?

3 个答案:

答案 0 :(得分:2)

没有尝试编译这些,但通常你不会在这些情况下声明的类上使用类型参数:

public class FooClass implements Map.Entry<String, List<String>> 

public class FooMap extends HashMap<String, List<String>>

答案 1 :(得分:1)

我正在猜测你要做什么,因为我的问题并不清楚。但是,如果您尝试为不会公开泛型参数的特定目的提出HashMap实现,则可以通过扩展参数化HashMap来实现。

例如,假设你想要做的是将FooClass实例中的name属性映射到实例本身。您可以像这样扩展HashMap:

public class FooClassMap extends HashMap<String, FooClass> { }

然后你只是实例化你的新实现,没有任何泛型语法,如下所示:

FooClassMap fooClassMap = new FooClassMap();

并像这样使用它(假设它有一个在构造函数中初始化的name属性):

FooClass fooClass = new FooClass("fooClassName");
fooClassMap.add(fooClass.getName(), fooClass);

我希望这就是你要找的东西,如果不是,那就很抱歉。

答案 2 :(得分:0)

您无法为任何参数HashMap<Foo>编写FooHashMap需要两个类型参数;弄乱Map.Entry不会改变这种情况。