你好,我试图理解这个方法签名:
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...
是什么意思。任何人都可以对这些有所了解吗?
答案 0 :(得分:3)
K
是type parameter of this method。它可以是你想要的任何东西。例如。 Integer
。在这种情况下,您需要直观地(在您的脑海中)用K
替换方法签名中的所有Integer
,以了解它正在采取和返回的内容。如果Integer
为K
,则该方法的行为如下:
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
。