Betrachten Sie diesen Code:Ist es möglich, zu erkennen, welche Objekte innerhalb eines anderen Objekts durch Reflektion zur Laufzeit definiert sind?
object A {
object AA extends A
object AB extends A
object AC extends A
}; class A
Wie ist es möglich, innerhalb der definierten Objekte zu „sehen“ Objekt A
zur Laufzeit? dachte ich eine Methode innerhalb object A
mit einigen einfachen Reflexion Code wäre genug, aber es scheint, dass der Compiler die Objekthierarchie bei der Kompilierung abflacht und erstellt die folgenden Klassendateien:
A.class
- Die Klasse AA$class
- Das Begleitobjekt von AA$AA$.class
- Das AA ObjektA$AB$.class
- Das Objekt ABA$AC$.class
- T er AC Objekt
Nach der Kompilierung gibt es keine Anzeichen über AA
, AB
oder AC
im Begleitobjekt A
, die meine magicMethod
haben würde.
Es scheint, dass die Klasse ClassLoader
einige verwandte Methoden zu dem, was ich vorhabe, zu tun, aber alle scheinen den genauen String-Namen der Klasse zu erwarten. Gibt es eine Möglichkeit, den ClassLoader nach allen Klassendateien zu fragen, die mit der Klasse beginnen, von der diese Methode im Pfad dieser Klasse aufgerufen wird (A$
)?
gee, du bist ** wirklich ** genau darüber, wie du diese 'MonthDate' Objekte deklarieren willst. –
Ja :-). Im Grunde möchte ich prägnanten DRY-Code, die Möglichkeit, meine eigenen Methoden hinzuzufügen, die Möglichkeit für den Benutzer, ihre eigenen Instanzen ohne einen Typkonflikt mit den deklarierten Instanzen instanziieren und "Selbsterfahrung" benötigen, so dass das Objekt, wie viele Objekte es kennt hält (und kann sie abrufen). Alles ohne spezielle Syntaxen oder Regeln wie das Registrieren der Instanzen zu erfinden. – soc