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 被限制为 FileString。我比较喜欢