Я компиляция это очень простой и наивный код Java с Eclipse, и Javac:Затмение/Javac разный байткод
package anypackagename;
public class Foo {
public static void bar(Class<?> cls) {
while (cls != null) {
final Class<?>[] interfaces = cls.getInterfaces();
// ...
cls = cls.getSuperclass();
}
}
}
Вопрос заключается в том, что я получаю различный байткод с различными инструментами.
Собран с Eclipse, я получил:
public static void bar(java.lang.Class<?>);
Code:
0: goto 13
3: aload_0
4: invokevirtual #18 // Method java/lang/Class.getInterfaces:()[Ljava/lang/Class;
7: astore_1
8: aload_0
9: invokevirtual #24 // Method java/lang/Class.getSuperclass:()Ljava/lang/Class;
12: astore_0
13: aload_0
14: ifnonnull 3
17: return
LineNumberTable:
line 6: 0
line 7: 3
line 11: 8
line 6: 13
line 13: 17
однако, составленный с JAVAC я получил:
public static void bar(java.lang.Class<?>);
Code:
0: aload_0
1: ifnull 17
4: aload_0
5: invokevirtual #2 // Method java/lang/Class.getInterfaces:()[Ljava/lang/Class;
8: astore_1
9: aload_0
10: invokevirtual #3 // Method java/lang/Class.getSuperclass:()Ljava/lang/Class;
13: astore_0
14: goto 0
17: return
LineNumberTable:
line 6: 0
line 7: 4
line 11: 9
line 12: 14
line 13: 17
по-видимому, «Eclipse реализовала свой собственный компилятор под названием, как Eclipse, компилятор Java (СЕС). " (What is the difference between javac and the Eclipse compiler?) ... Я хотел бы знать, есть ли какой-либо вариант использования в Eclipse, чтобы иметь тот же байт-код, созданный javac.
2 байтовых кода фактически одинаковы .. Таким образом, не имеет значения, какой компилятор вы используете :) – TheLostMind
Конечно! Используйте ant или maven для сборки. Кроме того, убедитесь, что вы используете один и тот же уровень компилятора в обоих. –
Mmm @Jon: Не уверен, что это дублируется с помощью http://stackoverflow.com/questions/14186091/how-to-configure-eclipse-to-compile-using-oracle-javac-1-7-0-09: В этом вопросе на самом деле нет ответа, рассказывающего, как настроить Eclipse для этого. – Javier