2013-06-26 268 views
6

直接从this Java教程:泛型方法:静态与非静态

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

非静态泛型方法是不是真的?如果不是什么的非静态泛型方法的语法?提前致谢。

回答

10

用于声明非静态的通用方法的语法是一样的静态方法,只是不static关键字:一般类型参数被放置在返回类型之前。

class Example { 
    public <E> void method(E param) { } 
} 

非静态方法也可以使用封装类的一般类型参数,像下面。这些不被视为通用方法;一个generic method is one that declares type parameters

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

+0

谢谢@newacct,我对泛型方法的定义感到困惑。 – Joni

7

对于任何通用方法都是如此。

public <T> T f() { 
    return this.<T> f(); 
} 
+0

你应该*真的*在这里得到一个警告,因为你实际上隐藏''''T' – Eugene

2

这种说法是所有通用的方法一样,因为这是一个通用的方法非常清晰 - 一个generic method是一个声明类型参数。