2011-05-24 85 views
1

你好,我想了解这个方法的签名:任何人都可以解释这种方法签名? <K>和K ...代表什么?

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...意思是说。任何人都可以阐明这些吗?

回答

3

Ktype parameter of this method。它可以是任何你想要的。例如。 Integer。在这种情况下,您需要视觉(在您的想法中)用Integer替代方法签名中的所有K,以了解其拍摄和返回的内容。与Integer作为K,该方法然后将表现为如下:

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

...又是varargs语法。它允许您将零个以上的参数或给定类型的数组传递给方法。例如。

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

ķ简单地表示泛型的存在 - 这方法在一个通用类K.它需要一个串行器上的通用类K和的K型的参数的变量数组操作操作,并且它返回一个地图,其将K的实例映射到字符串。

2

K是一个通用类型。 <K>只是声明该声明将讨论某种称为K的泛型。此处编码器可以对K声明限制,如<K extends List>,或不。

然后K被简单地用作占位符,一个泛型类型。例如,如果您使用Serializer<String>进行调用,则可以想象在整个方法中将调用方法,就好像K被替换为String类型。

这就是关于K的所有事情。

如果您需要英文方法签名的解释:需要操作K s的Serializer,以及零个或多个K s。它返回从K s到String s的映射。

+0

如果我正在编写一个需要一个键作为参数传递的方法,并且我确切知道该键是什么类的引用,是否需要使用'K'作为占位符?例如。 '私人布尔capReached(K键)'与'私人布尔capReached(整数键)'。在我的情况下,我使用这种方法来限制一个LinkedHashMap的大小。 – Ungeheuer 2016-07-25 18:20:16

0

K这里代表'钥匙'。

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

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

相关问题