泛型方法:静态 vs 非静态

10

直接从这里的Java教程中得知:

对于静态泛型方法,类型参数部分必须出现在方法返回类型之前。

对于非静态泛型方法不是这样吗?如果不是,非静态泛型方法的语法是什么?谢谢!

3个回答

13
声明非静态泛型方法的语法与静态方法相同,只是没有static关键字:泛型类型参数放置在返回类型之前。
class Example {
     public <E> void method(E param) { }
}

非静态方法也可以使用封闭类的泛型类型参数,例如下面这样。这些不被视为泛型方法;泛型方法是指声明类型参数的方法

class Example<T> {
     // Not a generic method!
     public void method(T param) { }
}

1
非静态的泛型方法可以使用封闭类的泛型类型参数。但它们并不是泛型方法。http://docs.oracle.com/javase/specs/jls/se7/html/jls-8.html#jls-8.4.4 - newacct
谢谢@newacct,我对泛型方法的定义感到困惑。 - Joni

7
这适用于任何通用方法。
public <T> T f() {
    return this.<T> f();
}

你应该在这里得到一个警告,因为你实际上是用 T 隐藏了 <T> - Eugene

2

对于所有的通用方法来说,这个陈述是正确的,因为这就是通用方法的定义--一个通用方法就是声明类型参数的方法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接