Essential Java Generics声明此代码的输出:
public interface Foo<T> {
void foo(T param);
}
public class Bar implements Foo<Bar> {
// This method will appear twice once with Object as parameter and once with Bar.
public void foo(Bar param) {
}
public static void main(String[] args) {
for (Method m : Bar.class.getMethods())
if (m.getName().startsWith("foo"))
System.out.println(m.toGenericString());
}
}
是:
public void Bar.foo(Bar)
public volatile void Bar.foo(java.lang.Object)
但是当我编译(1.7编译器)并运行代码时,我有:
public void Bar.foo(Bar)
public void Bar.foo(java.lang.Object)
我使用 1.6 编译器重新编译它。但我的输出仍然是一样的。
作者的准确报价是:
$ java Bar public void Bar.foo(Bar) public volatile void Bar.foo(java.lang.Object)
因此,这似乎不是他的拼写错误。
是什么导致输出不同?