Eu tenho um ArrayList composto de diferentes elementos importados de um banco de dados, composto de strings, números, duplos e ints. Existe uma maneira de usar uma técnica de tipo de reflexão para descobrir o que cada tipo de dado que cada elemento contém?
Para sua informação: A razão pela qual existem tantos tipos de dados é que este é um pedaço de código Java sendo escrito para ser implementado com diferentes bancos de dados.
java
generics
reflection
arraylist
WolfmanDragon
fonte
fonte
instanceof
no caso do java?(int) o
não funciona em Java. Ele produz a mensagem de erroCannot cast from Object to int
. Use em seu(Integer o).intValue()
lugar.Você pode usar o
getClass()
método ou pode usar instanceof. Por exemploou
Observe que instanceof corresponderá a subclasses. Por exemplo, de
C
é uma subclasse deA
, então o seguinte será verdadeiro:No entanto, o seguinte será falso:
fonte
fonte
Você quase nunca quer usar algo como:
porque você não está contabilizando possíveis subclasses. Você realmente deseja usar Class # isAssignableFrom:
fonte
Em Java, apenas use o operador instanceof. Isso também cuidará das subclasses.
fonte
fonte
Basta chamar
.getClass()
cadaObject
um em um loop.Infelizmente, o Java não tem
map()
. :)fonte
Instanceof funciona se você não depende de classes específicas, mas também tenha em mente que você pode ter nulos na lista, então obj.getClass () irá falhar, mas instanceof sempre retorna falso em nulo.
fonte
Desde Java 8
fonte
em vez de usar,
object.getClass().getName()
você pode usarobject.getClass().getSimpleName()
, porque retorna um nome de classe simples sem um nome de pacote incluído.por exemplo,
dá,
fonte
Você diz "este é um trecho de código Java sendo escrito", do qual eu inferi que ainda há uma chance de que você possa projetá-lo de uma maneira diferente.
Ter um ArrayList é como ter uma coleção de coisas. Em vez de forçar o instanceof ou getClass toda vez que você pegar um objeto da lista, por que não projetar o sistema de forma que você obtenha o tipo do objeto quando recuperá-lo do banco de dados e armazene-o em uma coleção do tipo apropriado de objeto?
Ou você pode usar uma das muitas bibliotecas de acesso a dados existentes para fazer isso por você.
fonte
Se você espera que os dados sejam numéricos de alguma forma e tudo o que está interessado em fazer é converter o resultado em um valor numérico, sugiro:
fonte