Groovy / grails como determinar um tipo de dados?

176

Qual é a melhor maneira de determinar o tipo de dados no groovy?

Gostaria de formatar a saída de forma diferente se for uma data etc.

Jack BeNimble
fonte

Respostas:

244

Para determinar a classe de um objeto, basta chamar:

someObject.getClass()

Você pode abreviar isso para someObject.classna maioria dos casos. No entanto, se você usar isso em um, Mapele tentará recuperar o valor com a chave 'class'. Por isso, eu sempre usogetClass() mesmo que seja um pouco mais.

Se você deseja verificar se um objeto implementa uma interface específica ou estende uma classe específica (por exemplo, Data), use:

(somObject instanceof Date)

ou para verificar se a classe de um objeto é exatamente uma classe específica (não uma subclasse), use:

(somObject.getClass() == Date)
Dónal
fonte
2
instanceofé ótimo para filtragem com base na interface.
Cdeszaq # 12/13
Pelo menos no Groovy mais recente (2.3.7), também podemos escrever someObject.class
loloof64
5
@LaurentBERNABE que funciona na maioria dos casos, mas não em todos, por exemplo, uma Mapinstância
Dónal
Você está certo: ficamos nulos neste caso. Pedindo desculpas pelo erro.
precisa saber é o seguinte
Então o que é isso? def test = {} println test.getClass() classe Script1 $ _run_closure1 ??
Petrunov
33

Maneira simples e simples de verificar o tipo de objeto:

somObject in Date

Pode ser aplicado também a interfaces.

Michal Z muda
fonte
3

Apenas para adicionar outra opção à resposta de Dónal, você também pode usar o bom e velho java.lang.Object.getClass()método.

Pops
fonte
0

Você pode usar o operador de associação isCase (), que é outra maneira interessante:

assert Date.isCase(new Date())
Ibrahim.H
fonte
-20

somObject instanceof Date

deveria estar

somObject instanceOf Date

Mike N
fonte
11
Isso não está correto. instanceoftodos devem estar em letras minúsculas.
Cdeszaq #