views:

317

answers:

3

Hello, everyone!

I have an anonymous inner class inside another class (SomeClass).

Both SomeClass.class.getClasses() and SomeClass.class.getDeclaredClasses() return empty arrays.

I couldn't find some hints on this in Class' Javadocs.

Can anonymous inner classes be retrieved using reflection in some way?

What else are notable differences between anonymous inner classes and normal inner classes?

+1  A: 

You could try a brute force search of Class$1 ... Class$n until you can't find any more.

Peter Lawrey
Food for thought that given an anon inner class, you can find its enclosing Method, but getDeclaredInnerClasses() is not part of the Method api.
I think I can understand why there is no `getDeclaredInnerClasses()`. It would be impossible to implement without a change to the class file format.
Stephen C
Classes support meta information, which where such information could go. I don't think it is there because a good use case may not have been found. Perhaps what you are trying to do could be done another way. e.g. with Enum's??
Peter Lawrey
+1  A: 

If it's using reflection, it's probably a really bad idea. Leaving that aside, I believe you can additional inner classes at runtime, so it doesn't make sense to list classes that may not have been thought of yet. Listing currently loaded classes would, I guess, require going through Java agents or similar.

Anonymous inner classes have made up names, an enclosing method and additional synthetic fields for copying external local variables that have been copied. One class is pretty much the same as another at runtime. Remember that 1.1 introduced inner classes, but class files have barely changed since 1.0.

Tom Hawtin - tackline
Though not a solution answer, good arguments. Will mark as correct.
java.is.for.desktop
A: 

Never had cause to do this but take a look at this

non sequitor