Java 有人能解释这个方法吗?什么是<;K>;还有K。。。代表?
你好,我正在努力理解这个方法签名:Java 有人能解释这个方法吗?什么是<;K>;还有K。。。代表?,java,Java,你好,我正在努力理解这个方法签名: public <K> Map<K, String> getMulti(Serializer<K> keySerializer, K... keys) 公共映射getMulti(序列化器keySerializer,K…keys) 对于以下代码块: public <K> Map<K, String> getMulti(Serializer<K> keySerializer, K...
public <K> Map<K, String> getMulti(Serializer<K> keySerializer, K... keys)
公共映射getMulti(序列化器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;
}
公共映射getMulti(序列化器keySerializer,K…keys){
MultigetSliceQuery q=createMultigetSliceQuery(键空间、键序列化器、序列化器、序列化器);
q、 setColumnFamily(CF_名称);
q、 设定键;
q、 setColumnNames(列名称);
QueryResult r=q.execute();
Rows=r.get();
Map ret=新的HashMap(key.length);
用于(K:键){
HColumn c=rows.getByKey(k).getColumnSicle().getColumnByName(列名称);
如果(c!=null&&c.getValue()!=null){
ret.put(k,c.getValue());
}
}
返回ret;
}
我不确定方法声明中的
代表什么,或者K..
应该是什么意思。有人能解释一下这些吗?最重要的是K
。它可以是你想要的任何东西。例如,整数
。在这种情况下,您需要直观地(在您的头脑中)将方法签名中的所有K
替换为Integer
,以了解它所取和返回的内容。将Integer
设置为K
,则该方法的行为如下:
public Map<Integer, String> getMulti(Serializer<Integer> keySerializer, Integer... keys)
K只是表示泛型的存在——此方法对泛型类K进行操作。它接受一个对泛型类K进行操作的序列化程序和一个类型为K的变量数组,并返回一个将K的实例映射到字符串的映射。
K
是泛型
只是声明声明将讨论一些名为K
的泛型类型。在这里,编码者可以声明对K
的限制,比如
,也可以不声明
然后,K
被简单地用作占位符,一种泛型类型。例如,当您使用序列化程序调用该方法时,可以想象该方法将被调用,就好像在整个方法中K
被替换为类型String
这就是关于K
的所有情况
如果您想要用英语解释方法签名:它需要一个在K
s上运行的Serializer
,以及零个或多个K
s。它返回从K
s到String
s的映射。K
这里代表“键”
通用映射声明通常有一个签名map
,其中K
表示任意键类型,V
表示任意值类型
在您的情况下,值类型被限制为字符串
如果我正在编写一个需要一个键作为参数传递的方法,并且我确实知道该键将作为哪个类的引用,那么我是否需要使用K
作为占位符?例如,private boolean capreach(K键)
vs.private boolean capreach(整数键)
。在我的例子中,我使用这个方法来限制LinkedHashMap的大小。
getMulti(serializer);
getMulti(serializer, k1);
getMulti(serializer, k1, k2, k3);