是否有一个原因,Java通用方法不能在方法之前没有静态/实例引用调用?就像示例代码中的“案例2”和“案例5”一样。为什么编译器在静态调用时接受无效的语法调用(<?>方法)?
换句话说,为什么我们可以调用一个没有静态/实例引用的普通方法(比如在“case 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' someMethod()'不是有效的语法。 –
2015-03-02 21:48:19
这是一个语法错误。不过,你不需要'<...>',编译器通常会推断出正确的类型。 – 2015-03-02 21:48:53
@AdrianLeonhard是的,我知道,但不是一个语法错误,它编译和运行,如果你评论情况2和情况5。并且有些情况下,一些API你必须使用这些语法。 – 2015-03-02 21:52:21