Image

Imagestiver_rus wrote in Imageru_java

Компиляция 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? Или это просто очередной бред сановцев, который не размышляя передрали эклипсники?