Нужно написать внутренний класс, т.е. такой 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>(LOuter

V
;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>(LOuter

V
.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/Object

V
.end method
Но getDeclaringClass () возвращает null. Я дисассемблировал реальный java код,
используя dejasmin. Он был таким же, но там всё работало.
Что я делаю не так?
Здравствуйте, ded_savely, Вы писали:
_>Нужно написать внутренний класс, т.е. такой getDeclaringClass() которого возвращает не null.
_>Нужно написать на JasminXT или на Jamaica.
_>Например:
_>Но getDeclaringClass () возвращает null. Я дисассемблировал реальный java код,
_>используя dejasmin. Он был таким же, но там всё работало.
_>Что я делаю не так?
inner и outer классы должны содержать аттрибут InnerClasses
// Main.java
public class Main {
public class Inner {
}
}
Compiled from "Main.java"
public class Main extends java.lang.Object
SourceFile: "Main.java"
InnerClass:
public #5= #4 of #2; //Inner=class Main$Inner of class Main
const #2 = class #14; // Main
const #4 = class #16; // Main$Inner
const #5 = Asciz Inner;
const #6 = Asciz InnerClasses;
Compiled from "Main.java"
public class Main$Inner extends java.lang.Object
SourceFile: "Main.java"
InnerClass:
public #18= #3 of #16; //Inner=class Main$Inner of class Main
const #3 = class #17; // Main$Inner
const #16 = class #22; // Main
const #18 = Asciz Inner;
const #19 = Asciz InnerClasses;