这种方法签名意味着什么?

时间:2014-03-07 08:23:44

标签: java templates generics

我是Java的新手,遇到了一些我无法理解的代码 这是一些方法声明:

public <V> void method(Map<T,V>)

我在java中读过关于Generics的内容,但找不到任何关于 public <V> void 的描述
任何人都可以解释这是什么意思吗?

2 个答案:

答案 0 :(得分:4)

这是一种通用方法。它定义了一个名为<V>的方法范围类型。

此外,它使用可能具有类范围的类型<T>

例如,假设你有这个类,通过某种类型<T>进行参数化。

public class Something<T> {
    private T key;

    public Something(T key) {
        this.key = key;
    }

    public <V> V getValueForKey(Map<T, V> map) {
        return map.get(key);
    }
}

getValueFromKey()方法定义<V>类型,它将返回提供的Map中的对象,该对应于key成员。只是为了澄清:为了提供一个很好的例子,我使用的返回类型将是<V>而不是void,但这并不重要。

所以,例如,如果你有:

Map<String, Integer> map = new HashMap<String, Integer>();
map.put("One", 1);
map.put("Two", 2);

Something<String> something = new Something<String>("One");
Integer value = something.getValueForKey(map);

然后getValueForKey()将返回Integer,因为这是提供的Map中的类型。

答案 1 :(得分:0)

Map<T, V>包含T类型的键和类型V的值。该方法必须知道调用时哪种类型TV。接触调用方法的实例已经给出T,但V未知。因此,public <V> void method表示调用者在调用方法时必须提供V的类型。