【发布时间】:2014-10-02 23:39:06
【问题描述】:
在这个page,它有下面的代码示例来介绍泛型方法?
public static <K, V> boolean compare(Pair<K, V> p1, Pair<K, V> p2) {
return p1.getKey().equals(p2.getKey()) &&
p1.getValue().equals(p2.getValue());
}
-
我有一个问题,为什么我们需要在此处的“布尔”之前提及泛型?这个方法只是返回布尔类型。当我删除
<K, V>编译器抛出错误说cannot make a static reference to the non-static type K。public void setValue(V value) { this.value = value; } 在同一个链接上,我们有上面的方法,那么为什么我们这里没有提到的泛型类型参数
<V>?
编辑:在此处发布完整的代码,以便更好地理解我的问题:
Util.Java
public class Util {
// Generic static method
public static <K, V> boolean compare(Pair<K, V> p1, Pair<K, V> p2) {
return p1.getKey().equals(p2.getKey()) &&
p1.getValue().equals(p2.getValue());
}
}
对.Java
public class Pair<K, V> {
private K key;
private V value;
// Generic constructor
public Pair(K key, V value) {
this.key = key;
this.value = value;
}
// Generic methods
public void setKey(K key) { this.key = key; }
public void setValue(V value) { this.value = value; }
public K getKey() { return key; }
public V getValue() { return value; }
}
【问题讨论】:
-
它是静态的。见这里:stackoverflow.com/questions/4409100/…
-
@user2588666:这个问题的反面在这里:Static method in a generic class?
-
我无法重现您的错误消息。如果我从方法中删除
<K,V>,我会得到error: cannot find symbol public static boolean compare(Pair<**K**, V> p1, Pair<K, V> p2) { symbol: class K, location: class Util。考虑发布MCVE,这将使我们重现您的实际问题。总之简而言之,如果你想在方法中使用一些泛型类型,但你没有通过class YourClass<K,V>在类本身中声明它,你可以在方法中进行。你需要在它的返回类型之前声明它,因为返回类型也可以使用你声明的泛型类型。 -
@Pshemo 我不希望这个问题太长太无聊所以没有在这里发布完整的代码而是提到了链接。
-
提问准确比不枯燥更重要。没有人希望您粘贴数百万行代码,只需创建一些简单的示例,让我们重现您的错误/问题。