Внутренние классы
От: ded_savely  
Дата: 13.03.06 06:54
Оценка:
Нужно написать внутренний класс, т.е. такой getDeclaringClass() которого возвращает не null.
Нужно написать на JasminXT или на Jamaica.


Например:
;------------------------------------------------------------------
;This is outer class
.source Outer.j
.class Outer
.super SomeSuperClass

.method public createrInnerClass()V
.limit stack 10
.limit locals 10

;create a Inner object
new Outer$Inner
dup
invokenonvirtual Outer$Inner/<init>(LOuterV

;test function must print a Outer class name
invokevirtual Outer$Inner/testFunction ()V
.end method


;------------------------------------------------------------------
;This is inner class
.source Outer$Inner.j
.class Outer$Inner
.super java/lang/Object

.field final this$0 LOuter;

;contructor
.method pubilc <init>(LOuterV
.limit stack 10
.limit locals 10

aload_0
invokenonvirtual Object/<init>()V

aload_0
aload_1
putfield Inner$Outer/this$0 LOuter;

return
.end method

;test
.method public testFunction ()V
.limit stack 10
.limit locals 10

;get out object
getstatic java/io/PrintStream/out java/io/PrintStream;

aload_0
invokevirtual java/lang/Object/getClass()java/lang/Class;

;now in stack Outer$Inner class
invokevirtual java/Class/getDeclaringClass()java/lang/Class;

;but now in stack null
invokevirtual java/io/PrintStream/print (Ljava/lang/ObjectV
.end method


Но getDeclaringClass () возвращает null. Я дисассемблировал реальный java код,
используя dejasmin. Он был таким же, но там всё работало.

Что я делаю не так?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.