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);