谁能解释这种方法签名? <k>和K ...代表什么?</k>

时间:2011-05-24 17:32:41

标签: java

你好,我试图理解这个方法签名:

  public <K> Map<K, String> getMulti(Serializer<K> keySerializer, K... keys)

对于以下代码块:

public <K> Map<K, String> getMulti(Serializer<K> keySerializer, K... keys) {
    MultigetSliceQuery<K, String, String> q = createMultigetSliceQuery(keyspace, keySerializer, serializer, serializer);
    q.setColumnFamily(CF_NAME);
    q.setKeys(keys);
    q.setColumnNames(COLUMN_NAME);

    QueryResult<Rows<K, String, String>> r = q.execute();
    Rows<K, String, String> rows = r.get();
    Map<K, String> ret = new HashMap<K, String>(keys.length);
    for (K k : keys) {
        HColumn<String, String> c = rows.getByKey(k).getColumnSlice().getColumnByName(COLUMN_NAME);
        if (c != null && c.getValue() != null) {
            ret.put(k, c.getValue());
        }
    }
    return ret;
}

我不确定方法声明中的<K>代表什么,或者K...是什么意思。任何人都可以对这些有所了解吗?

4 个答案:

答案 0 :(得分:3)

Ktype parameter of this method。它可以是你想要的任何东西。例如。 Integer。在这种情况下,您需要直观地(在您的脑海中)用K替换方法签名中的所有Integer,以了解它正在采取和返回的内容。如果IntegerK,则该方法的行为如下:

public Map<Integer, String> getMulti(Serializer<Integer> keySerializer, Integer... keys)

...依次是varargs语法。它允许您将给定类型的零多个参数或一个数组传递给方法。 E.g。

getMulti(serializer);
getMulti(serializer, k1);
getMulti(serializer, k1, k2, k3);

答案 1 :(得分:2)

K是一种通用类型。 <K>只是声明声明将讨论一些名为K的泛型类型。在这里,编码人员可以对K <K extends List>声明限制,例如K

然后Serializer<String>仅用作占位符,泛型类型。例如,当您使用K调用此方法时,请假设将调用该方法,就像在整个方法中String替换为类型K一样。

这就是Serializer所发生的一切。

如果您想要用英语解释方法签名:K需要K个,{0}}才能运行K。它返回从String s到{{1}} s的映射。

答案 2 :(得分:0)

K只表示泛型的存在 - 此方法在泛型类K上运行。它采用对泛型类K进行操作的序列化程序和类型为K的变量参数数组,并返回映射K实例的映射到弦乐。

答案 3 :(得分:0)

K这里代表'key'。

通用地图声明通常具有签名Map<K,V>,其中K代表任意键类型,V代表任意值类型。

在您的情况下,值类型的范围为String