如何在JAVA泛型类型中定义使用2个泛型参数扩展Map对象?

时间:2014-06-12 09:47:39

标签: java generics map

这是我的代码:

public class Configuration <T extends Map<K,V>, K, V> {
    public Map<K, V> fields;

    public Configuration() {
        this.fields = new T<K, V>(); // --> error: Type 'T' does not have type parameters
    }
}

为什么我不能用通用参数定义通用对象?

1 个答案:

答案 0 :(得分:4)

由于Java中设计了泛型(通用信息仅在编译时使用),因此new T() T是一个类型参数。{/ p>

一种可能的替代方法是做这样的事情:

public interface ConfigurationMapFactory<K, V> {
    public Map<K, V> createMap();
}

public class Configuration <K, V> {
    public Map<K, V> fields;

    public Configuration(ConfigurationMapFactory<K, V> mapFactory) {
        this.fields = mapFactory.createMap();
    }
}

虽然在这种情况下你可以轻松地做到这一点 - 这是否有理由不起作用?

public class Configuration <K, V> {
    public Map<K, V> fields;

    public Configuration(Map<K, V> fields) {
        this.fields = fields;
    }
}