获取Java/Groovy中类属性的类型

获取Java/Groovy中类属性的类型,java,groovy,Java,Groovy,我正在Grails上创建一个动态查询。UI将传递一个包含所有条件的JSON对象。我设法做到了: def criteria = params.criteria def l = DomainClass.createCriteria().list { for(int k = 0; k < criteria.names().length(); k++) { def names = list[x].names() if(DomainClass.hasProp

我正在Grails上创建一个动态查询。UI将传递一个包含所有条件的JSON对象。我设法做到了:

def criteria = params.criteria

def l = DomainClass.createCriteria().list {
    for(int k = 0; k < criteria.names().length(); k++) {
        def names = list[x].names()
        if(DomainClass.hasProperty(names[k])) {
            eq(names[k], list[x][names[k]])
        }
    }
}

但是在Java和Groovy中,我都不知道如何处理
if
语句中的条件。

有几种方法可以解决这个问题

instanceof

以你的例子,你可以做类似的事情

if(DomainClass.getProperty(names[k]).getClass().equals(Date.class))
精确匹配

new Long(1L).getClass().equals(Long.class)
> true

您的
=
方法(添加了
.class
)也应该有效,因为不太可能加载两个不同的长类,但我更喜欢
equals
方法

new Long(1L).getClass() == Long.class
> true (most likely)

在Groovy中,
==
如果lef端为非null,则始终调用
equals()
。在Groovy中不应该使用
equals
new Long(1L).getClass().equals(Long.class)
> true
new Long(1L) instanceof Number
> true
new Long(1L) instanceof Long
> true
new Long(1L).getClass() == Long.class
> true (most likely)