なんか変
java.lang.Object.run() て。
$ cat Main.java class Main<T extends Object & Runnable, S extends T> { public void callRun(S x) { // ここの S を T に変えると正常に動く x.run(); } public static void main(String[] args) { new Main<MyRunnable, MyRunnable>().callRun(new MyRunnable()); } } class MyRunnable implements Runnable { public void run() { System.out.println("OK."); } } $ javac Main.java $ java Main Exception in thread "main" java.lang.NoSuchMethodError: java.lang.Object.run()V at Main.callRun(Main.java:4) at Main.main(Main.java:7)
逆アセンブルするとこんな感じ。
public void callRun(java.lang.Object); Code: 0: aload_1 1: invokevirtual #2; //Method java/lang/Object.run:()V 4: return