【问题标题】:Use of generic method with primitive return type使用具有原始返回类型的泛型方法
【发布时间】:2014-08-05 18:37:53
【问题描述】:
public class Util<K,V> {
    public static <K, V> boolean compare(Pair<K, V> p1, Pair<K, V> p2) {
    }
}

我知道我们为什么使用Util&lt;K,V&gt;,但static &lt;K,V&gt; 有什么用?我是从link 那里得到的。请帮我理解。

【问题讨论】:

  • 对于静态泛型方法,类型参数部分必须出现在方法的返回类型之前。这就是原因,否则您只需要指定返回类型。
  • 链接中的代码有Util,没有&lt;K,V&gt;
  • 那是我故意添加的,目的是为了区分和澄清问题。
  • 感谢您的回答。

标签: java generics


【解决方案1】:

把这个分开。 &lt;K, V&gt; 是方法参数。 static 是使方法“静态”的修饰符,即您可以在不创建对象的情况下调用它。

只是阅读一些有关 java、方法、类、静态方法等的知识。

【讨论】:

  • 为什么我们需要添加静态 布尔值,因为它与静态布尔值相同?
  • 不是方法参数。方法参数为p1p2。是的,你知道这一点,但它会降低答案的用处,因为对于还不知道这一点的初学者来说,它并不清楚。
  • @AlexR,谢谢你的回答。
【解决方案2】:

静态方法被自己调用,不引用Util 类的任何实例。因为只有Util实例 绑定了类的类型参数,所以compare 中使用的类型参数未绑定。因此,必须调用类型推断的机制来在每个调用点解决它们。这就是方法返回类型前面的&lt;K, V&gt; 语法所代表的内容。

请注意,实例方法也可以使用未绑定的类型参数,因此static 不是您问题的本质。碰巧大多数依赖类型推断的方法都是静态的。

【讨论】:

    【解决方案3】:

    可以在类上调用静态方法而无需实例化对象

    盗自here

    通常,如果不先创建该类的实例,就不能调用该类的方法。通过使用 static 关键字声明方法,您可以在不首先创建对象的情况下调用它,因为它变成了类方法(即属于类而不是对象的方法)。

    【讨论】:

      【解决方案4】:

      static关键字与Util&lt;K,V&gt;无关,只是让方法成为类方法,这样就不需要创建类的实例来调用方法。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-12-24
        • 1970-01-01
        相关资源
        最近更新 更多