Essential Java Genericsこのコードの出力と述べている:コンパイラが挿入したメソッド(型消去による)はvolatileですか?
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)
だから、彼の部分に誤植のように見えるしていません。
出力が異なる原因は何ですか?
あなたはそのblogpostの作家が間違いをしたと言っていますか? – Pacerier
@Pacerier:私が言っていることは、この文脈では、「揮発性」は赤いニシンであるということです。 – NPE
私があなたを理解していることを確認するために、作者が出力が 'public volatile void Bar.foo(java.lang.Object)'であったことはないので、作者が誤植をしていると言っていますか? – Pacerier