我目前正在研究某些东西,并且正在考虑是否有一种更通用的方法来实现此目的:
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
}
Run Code Online (Sandbox Code Playgroud)
如您所见,我正在检查一个对象的多个实例,它们执行相同的操作,但是需要检查它们是否是该类的实例,以便它们不执行params.query并且params.body在返回时执行true。有没有更时髦的方法可以做到这一点?
PS我通常会在谷歌搜索,但我不知道要搜索什么关键字。
你可以做:
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
}
Run Code Online (Sandbox Code Playgroud)
也可以使用三元运算符(但这可能不可读):
(cls in [Order, PaymentRequest,] ? {params.body = reqObj} : {params.query = reqObj})()
if (cls in [PaymentRequest,]) { // may be instanceof as well
params.requestContentType = ContentType.JSON
}
Run Code Online (Sandbox Code Playgroud)
小智 5
好像是switch语句的工作,或者至少通常是为了避免if ... else if..else 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
}
Run Code Online (Sandbox Code Playgroud)
本文讨论了一些在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
| 归档时间: |
|
| 查看次数: |
15741 次 |
| 最近记录: |