【发布时间】:2015-03-02 21:46:26
【问题描述】:
是否存在在方法之前没有静态/实例引用无法调用 Java 通用方法的原因?如示例代码中的“case 2”和“case 5”。
换句话说,为什么我们可以在没有静态/实例引用的情况下调用普通方法(如“案例 3”)而在通用方法中却不能?
public class MyClass {
public static void main(String[] args) {
MyClass.<String>doWhatEver("Test Me!"); // case 1
<String>doWhatEver("Test Me2!"); // case 2 COMPILE ERROR HERE
doSomething("Test Me 3!"); // case 3 (just for compare)
new MyClass().<String>doMoreStuff("Test me 4"); // case 4
}
public void doX(){
<String>doMoreStuff("test me 5"); // case 5 COMPILE ERROR HERE
}
public static <T> void doWhatEver(T x){
System.out.println(x);
}
public static void doSomething(String x){
System.out.println(x);
}
public <T> void doMoreStuff(T x){
System.out.println(x);
}
}
【问题讨论】:
-
AFAIK
<T>someMethod()不是一个有效的语法.. -
这是一个语法错误。不过你不需要
<...>,编译器通常会推断出正确的类型。 -
@AdrianLeonhard 是的,我知道,但不是语法错误,如果您对案例 2 和案例 5 进行注释,它会编译并运行。在某些情况下,某些 API 必须使用这些语法。
-
@RC。你在哪里看到这个“
someMethod()”?是 someMethod(T t) 。这是法律代码 -
@NESPowerGlove 是的,因为您可以在没有实例/静态引用的情况下使用普通方法调用,而通用方法则不能......