Ich habe eine ArrayList, die aus verschiedenen Elementen besteht, die aus einer Datenbank importiert wurden und aus Zeichenfolgen, Zahlen, Doppelwerten und Ints bestehen. Gibt es eine Möglichkeit, mithilfe einer Reflexionstechnik herauszufinden, welche Datentypen die einzelnen Elemente enthalten?
Zu Ihrer Information: Der Grund dafür, dass es so viele Arten von Daten gibt, ist, dass dies ein Stück Java-Code ist, der geschrieben wird, um mit verschiedenen DBs implementiert zu werden.
java
generics
reflection
arraylist
WolfmanDragon
quelle
quelle
instanceof
im Java-Fall tun ?(int) o
funktioniert nicht in Java. Es wird die Fehlermeldung ausgegebenCannot cast from Object to int
. Verwenden Sie(Integer o).intValue()
stattdessen.Sie können die
getClass()
Methode oder instanceof verwenden. Beispielsweiseoder
Beachten Sie, dass instanceof mit Unterklassen übereinstimmt. Zum Beispiel ist of
C
eine Unterklasse vonA
, dann gilt Folgendes:Folgendes ist jedoch falsch:
quelle
quelle
Sie möchten fast nie, dass Sie etwas verwenden wie:
weil Sie mögliche Unterklassen nicht berücksichtigen. Sie möchten wirklich Class # isAssignableFrom verwenden:
quelle
Verwenden Sie in Java einfach den Operator instanceof. Dies wird auch für Unterklassen sorgen.
quelle
quelle
Rufen Sie einfach
.getClass()
jedenObject
in einer Schleife auf.Java hat das leider nicht
map()
. :) :)quelle
Instanceof funktioniert, wenn Sie nicht von bestimmten Klassen abhängig sind, aber auch bedenken, dass die Liste Nullen enthalten kann, sodass obj.getClass () fehlschlägt, instanceof jedoch bei false immer false zurückgibt.
quelle
Seit Java 8
quelle
Anstatt zu verwenden
object.getClass().getName()
, können Sie verwendenobject.getClass().getSimpleName()
, da ein einfacher Klassenname ohne Paketnamen zurückgegeben wird.zum Beispiel,
gibt,
quelle
Sie sagen, "dies ist ein Stück Java-Code, der geschrieben wird", woraus ich schließe, dass es immer noch eine Chance gibt, dass Sie es anders gestalten könnten.
Eine ArrayList zu haben ist wie eine Sammlung von Dingen. Anstatt die Instanz von oder getClass jedes Mal zu erzwingen, wenn Sie ein Objekt aus der Liste nehmen, sollten Sie das System so gestalten, dass Sie den Typ des Objekts erhalten, wenn Sie es aus der Datenbank abrufen, und es in einer Sammlung des entsprechenden Typs von speichern Objekt?
Sie können auch eine der vielen vorhandenen Datenzugriffsbibliotheken verwenden, um dies für Sie zu tun.
quelle
Wenn Sie erwarten, dass die Daten in irgendeiner Form numerisch sind, und alles, was Sie tun möchten, ist, das Ergebnis in einen numerischen Wert umzuwandeln, würde ich vorschlagen:
quelle