gpt4 book ai didi

java - 为什么我们必须在方法返回类型之前提到泛型类型参数?

转载 作者:行者123 更新时间:2023-11-30 08:20:17 26 4
gpt4 key购买 nike

在此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());
}
  1. 我有一个问题,为什么我们需要在此处的“boolean 值”之前提及泛型?此方法仅返回 boolean 类型。当我删除 <K, V> 时编译器抛出错误说 cannot make a static reference to the non-static type K .

    public void setValue(V value) {
    this.value = value;
    }
  2. 在同一个链接上,我们有上述方法,那么为什么我们这里没有提到的泛型类型参数 <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; }
}

最佳答案

如果类没有声明通用类型,方法将不知道您请求的类型。这通常是静态的情况,因为这些方法不是类实例的一部分。

类的泛型参数的范围只在实例方法和字段中。静态方法必须为其作用域声明它们自己的类型参数。

来自The Java™ Tutorials: Generic Methods

Generic methods are methods that introduce their own type parameters. This is similar to declaring a generic type, but the type parameter's scope is limited to the method where it is declared. Static and non-static generic methods are allowed, as well as generic class constructors.

您的示例似乎来自此页面,您在该页面上拥有所需的所有信息。如果您需要探索有关泛型的更多信息,请继续学习您的教程。 :-)

对于你的第二个问题,setValue() 方法是 Pair 类的成员,它提供了 KV 类型参数:

public class Pair<K, V> {
private V value;
public void setValue(V value) { this.value = value; }
public V getValue() { return value; }
}

V 在实例范围内声明。

关于java - 为什么我们必须在方法返回类型之前提到泛型类型参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26171284/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com