Компиляция qualified new
Есть простенький класс:
Вопрос: какой смысл несут строчки
public class TestNewClass {
public void test() {
MemberClass.Member2Class a = (new MemberClass()).new Member2Class();
}
class MemberClass {
public class Member2Class {}
}
}Компилируем его javac 1.5 (ejc показывает тот же результат). Функция test() выглядит следующим образом:0000 BB0002 new #0002<TestNewClass$MemberClass$Member2Class> 0003 59 dup 0004 BB0003 new #0003<TestNewClass$MemberClass> 0007 59 dup 0008 2A aload_0 0009 B70004 invokespecial #0004<void TestNewClass$MemberClass.<init>(TestNewClass o)> 000C 59 dup 000D B60005 invokevirtual #0005<java.lang.Class java.lang.Object.getClass()> 0010 57 pop 0011 B70006 invokespecial #0006<void TestNewClass$MemberClass$Member2Class.<init>(TestNewClass$MemberClass o)> 0014 4C astore_1 0015 B1 return
Вопрос: какой смысл несут строчки
000C 59 dup 000D B60005 invokevirtual #0005<java.lang.Class java.lang.Object.getClass()> 0010 57 popзачем тут нужен безрезультатный вызов getClass? Или это просто очередной бред сановцев, который не размышляя передрали эклипсники?
