Avatar billede kernelx Juniormester
02. marts 2016 - 20:23 Der er 3 kommentarer og
1 løsning

Reflection vs anonymous class

Test.java
----
public class Test {

    public void doSomething() {
        Object anonym = new Object() {
            public void foo() {
                // ...
            }
        };
    }

}
----

---
public static void main(String[] args) {
    Class<?> testClass = Test.class;
    List<Class<?>> anonymousClasses = testClass.getAnonymousClasses();
    System.out.println(anonymousClasses.get(0).getMethods[0].getName();
// output: foo
}
---

En method med navnet getAnonymousClasses() findes ikke for Class.
Er det muligt at faa fat i "foo"?
Avatar billede arne_v Ekspert
02. marts 2016 - 21:13 #1
Jeg tror at du er paa vej ud i noget snavs.

:-)

Men:


package march;

public class Test {
    public void doSomething() {
        Object anonym = new Object() {
            public void foo() {
            }
        };
    }
    public static void main(String[] args) throws Exception {
        Class<?>[] classes = Test.class.getClasses();
        System.out.println(classes.length); // 0 elements so no good
        Class<?> hack = Class.forName("march.Test$1");
        System.out.println(hack.getMethods()[0].getName());
    }
}
Avatar billede kernelx Juniormester
03. marts 2016 - 09:38 #2
Mange tak. Er det en "java standard" at de hedder saadan (march.Test$1, march.Test$2, ...)? Eller er det kun saadan i oracle jvm?

Hvis det ikke er defineret, at de hedder saadan, saa er det ogsaa for meget snavs for mig :-)

Mange tak! Husk at skrive et eller andet som svar :-)
Avatar billede arne_v Ekspert
03. marts 2016 - 15:10 #3
https://docs.oracle.com/javase/specs/jls/se8/html/jls-13.html#jls-13.1

siger:

The binary name of an anonymous class (§15.9.5) consists of the binary name of its immediately enclosing type, followed by $, followed by a non-empty sequence of digits.

saa enhver JVM skal navngive med:

pakke.klasse$nummer

At nummerering starter med 1 maa saa vaere implementations specifikt.

Men jeg har svaert ved at se hvorfor nogen skulle vaelge at starte med 77.

:-)

Og svar.
Avatar billede arne_v Ekspert
03. marts 2016 - 15:10 #4
om igen
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester