Java Groovy确保正确参数类型的最佳/推荐方法
我试着用最好的方式做事情。 检查参数类型(关于性能和“Groovy方式”)的最佳方法是什么?我想到了两种实现: def部署(json){ if(!(json instanceof String)&&(json instanceof File)){ json=json.text }否则{ 抛出新的IllegalArgumentException('参数类型不匹配-\'json\'应该是字符串或文件') } //待办事项 } 或Java Groovy确保正确参数类型的最佳/推荐方法,java,groovy,method-signature,Java,Groovy,Method Signature,我试着用最好的方式做事情。 检查参数类型(关于性能和“Groovy方式”)的最佳方法是什么?我想到了两种实现: def部署(json){ if(!(json instanceof String)&&(json instanceof File)){ json=json.text }否则{ 抛出新的IllegalArgumentException('参数类型不匹配-\'json\'应该是字符串或文件') } //待办事项 } 或 谢谢:)检查的实例应该很好。但是我认为您的条件是错误的——您似乎想
谢谢:)检查的
实例应该很好。但是我认为您的条件是错误的——您似乎想执行以下操作:
if (json instanceof File) {
json = json.text
} else if(!(json instanceof String)) {
throw new IllegalArgumentException('argument type mismatch – \'json\' should be String or File')
}
您还可以编写以下内容:
if (json.class in [String.class, File.class]) {
您的第二种方法看起来更简单,只有两个方法通过签名清楚地显示了意图。您的问题中没有groovy特定的内容,更多的是关于编译/运行时失败
在第一个代码段中,json
变量具有Object
类型,并允许传入所有内容。如果您错误地传入json
对象或Map
,它将在运行时失败
在第二个代码片段中,json被限制为File
或String
。我更喜欢它。谢谢你的回答:)我认为我的逻辑是正确的,因为我需要一个字符串,所以,如果json
是一个,那么类型是正确的。此外,感谢[…]中的类
@Matheus如果json
是String
,则该条件将导致IllegalArgumentException
。第二个条件。如果您的方法必须采用类型,则声明该类型。如果它返回类型,则也声明该类型。我还更喜欢第二个选项–更接近Java,我更习惯于使用它。在这种情况下,我It’使用Java可能比使用Groovy更好。谢谢!
if (json.class in [String.class, File.class]) {