将泛型类中的约束方法限制为特定类型

时间:2016-11-08 10:19:22

标签: java generics dictionary

下面的代码片段无法编译;我有一个带有Map的泛型类,它从通用键K映射到Floats。我的大多数方法都以真正通用的方式处理这个地图。

此外,我想允许使用升序整数值初始化地图。显然,这要求我将方法约束为K = Integer。不幸的是,我收到以下错误:

  

在Map类型中放置(K,Float)的方法不适用于参数(K扩展为Integer,Float)

非常感谢任何帮助!

public class MyClass<K> {
    Map<K,Float> myMap;

    <K extends Integer> MyClass(int size){
       distribution = new HashMap<K,Float>();
       Integer bar = 0;
       while(bar<size){
          Float rnd = ThreadLocalRandom.current().nextFloat();
          myMap.put(bar,rnd);
          bar++;
       }
    }
}

2 个答案:

答案 0 :(得分:4)

您可以扩展您的类并为基类指定参数类型:

class MyClass<K> {
    Map<K,Float> myMap;
}
class Derived extends MyClass<Integer>{
    void SparsePDT(int size){
        myMap = new HashMap<Integer,Float>();
        Integer bar = 0;
        while(bar<size){
            Float rnd = ThreadLocalRandom.current().nextFloat();
            myMap.put(bar,rnd);
            bar++;
        }
    }
}

它使课程&#34; MyClass&#34;可以保持完全通用,也可以使用整数类型的地图 有关扩展通用类的更多信息,请阅读here 希望它有所帮助。

答案 1 :(得分:1)

另一种作为子类的方法是使用静态创建方法:

date