Groovy best/recommended 确保参数类型正确的方法
Groovy best/recommended approach to ensure correct argument type
我正在尽最大努力 "Groovy-way" 做事。
检查参数类型的最佳方法是什么(关于性能和“Groovy-方式)?我有两种实现方式:
def deploy(json) {
if (!(json instanceof String) && (json instanceof File)) {
json = json.text
} else {
throw new IllegalArgumentException('argument type mismatch – \'json\' should be String or File')
}
// TODO
}
或
def deploy(File json) {
deploy(json.text)
}
def deploy(String json) {
// TODO
}
谢谢:)
instanceof
检查应该没问题。但是我认为你的条件不对——你似乎想这样做:
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 具体内容,更多的是关于 compile/runtime 失败。
在第一个片段中 json
变量具有 Object
类型并允许传入所有内容。如果传入 JSON
对象或 Map
它将在运行时失败误会了。
在第二个代码段中,json 被限制为 File
或 String
。我比较喜欢
我正在尽最大努力 "Groovy-way" 做事。 检查参数类型的最佳方法是什么(关于性能和“Groovy-方式)?我有两种实现方式:
def deploy(json) {
if (!(json instanceof String) && (json instanceof File)) {
json = json.text
} else {
throw new IllegalArgumentException('argument type mismatch – \'json\' should be String or File')
}
// TODO
}
或
def deploy(File json) {
deploy(json.text)
}
def deploy(String json) {
// TODO
}
谢谢:)
instanceof
检查应该没问题。但是我认为你的条件不对——你似乎想这样做:
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 具体内容,更多的是关于 compile/runtime 失败。
在第一个片段中 json
变量具有 Object
类型并允许传入所有内容。如果传入 JSON
对象或 Map
它将在运行时失败误会了。
在第二个代码段中,json 被限制为 File
或 String
。我比较喜欢