在java中的泛型方法中将通用值添加到地图中

时间:2017-10-29 19:32:23

标签: java generics

我不熟悉java Generics(使用IntelliJ)。 我想要的是为集合添加通用值。 下面的代码有两个问题。

我看了https://docs.oracle.com/javase/tutorial/java/generics/methods.htmlhttps://docs.oracle.com/javase/tutorial/extra/generics/methods.html 但不知道为什么下面的代码有错误。

Q1)我在map.put(T, T);的add方法中有错误信息,这样在Ts:表达式预期下出现红色波纹,引入局部变量

Q2)在这种情况下想知道,我应该将课程声明为public class Test<T>还是我可以声明public class Test

public class Test<T> {
Map<T, T> map;


public Test() {
    map = new HashMap<T, T>();        
}

public <T> void add(T value) throws Exception {
    map.put(value, value);  // Q1) red ripple under value: Expression Expected, introduce local variable

}
}

1 个答案:

答案 0 :(得分:1)

这里有两个问题。

  1. 通用方法参数T隐藏了第一类T。它们是不同的类型,您无法引用T(除非您重命名其中一个)。

  2. 方法map.put需要T类型的值,而不是此类型本身(无论如何它都不是Class的实例)。

  3. 解决方案:

    public void add(T value) throws Exception {
        map.put(value, value);
    }
    
      

    在这种情况下想知道,我应该将课程声明为public class Test<T>还是我可以声明public class Test

    如果您想要几个通用方法,则不一定需要声明类泛型类型 - 使用自己的泛型类型创建方法。请注意,它们之间不会有任何相似之处。

    但是,在您的情况下,通用类型T是必需的,因为您声明了通用字段Map<T, T> map