我目前正在研究某些事情,我在想是否有一种更加时髦的方式来实现这一点:
if ( reqObj instanceof Order ) {
params.body = reqObj
}
else if ( reqObj instanceof PaymentRequest ) {
params.requestContentType = ContentType.JSON
params.body = reqObj
}
else if ( reqObj instanceof ShipmentRequest ) {
params.body = reqObj
}
else if ( reqObj instanceof StockLocationRequest ) {
params.body = reqObj
}
else if ( reqObj instanceof StockItemRequest ) {
params.body = reqObj
}
else if ( reqObj instanceof StockMovementRequest ) {
params.body = reqObj
}
else if ( reqObj instanceof ZoneRequest ) {
params.body = reqObj
}
else{
params.query = reqObj
}
正如您所看到的,我正在检查执行相同操作的对象的多个实例,但是如果它们是该类的实例,则需要检查它们,以便它们不执行params.query
并执行此操作params.body
如果返回true
。有没有更古老的方法来做到这一点?
P.S。我通常会在谷歌搜索,但我对要搜索的关键词毫无头绪。
答案 0 :(得分:5)
看起来像switch语句的工作,或者至少通常是为了避免永远长时间而实现的...如果... else ifel if ... else类型结构。看到groovy可以处理switch语句中的对象,你不必在变量之间使用它来使它工作。所以最终可能是这样的:
switch (reqObj) {
case {it instanceof Order}:
result: params.requestContentType = ContentType.JSON
params.body = reqObj
break
...
default:
result: params.query = reqObj
break
}
本文讨论了使用groovy在switch语句中使用自定义对象的能力,尽管我认为在他们的示例中他们使用toString()方法并在case语句中使用字符串值进行比较。 http://www.javaworld.com/article/2073225/groovy--switch-on-steroids.html
另一方面,此站点使用各种对象属性显示切换,包括instanceof语句http://mrhaki.blogspot.com/2009/08/groovy-goodness-switch-statement.html
答案 1 :(得分:3)
你可以这样做:
def cls = reqObj.getClass()
if (cls in [Order, PaymentRequest, ]) { //other classess
params.body = reqObj
} else {
params.query = reqObj
}
if (cls in [PaymentRequest,]) { // may be instanceof as well
params.requestContentType = ContentType.JSON
}
也可以使用三元运算符(但这可能不可读):
(cls in [Order, PaymentRequest,] ? {params.body = reqObj} : {params.query = reqObj})()
if (cls in [PaymentRequest,]) { // may be instanceof as well
params.requestContentType = ContentType.JSON
}