特征中的 Groovy 命名参数

问题描述 投票:0回答:1

给出了

@NamedVariant
groovy 变换的示例 - 一切都按预期工作:

import groovy.transform.NamedVariant

class A {
    @NamedVariant
    def func(String key1 = "val1", String key2 = "val2") {
        print "key1=$key1, key=$key2"
    }
}

new A().func(key2: "xxx")

但是当我将

func
移动到这样的特征时:

import groovy.transform.NamedVariant

class A implements B {}

trait B {
    @NamedVariant
    def func(String key1 = "val1", String key2 = "val2") {
        print "key1=$key1, key=$key2"
    }
}

new A().func(key2: "xxx")

编译失败并出现以下错误消息:

org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
ideaGroovyConsole.groovy: -1: Error during @NamedVariant processing. Class B$Trait$Helper already has a named-arg method of type [org.codehaus.groovy.ast.Parameter@6fd1660[name: namedArgs, type: java.util.Map, hasDefaultValue: false]]
 @ line -1, column -1.

groovy 支持

@NamedVariant
会改变内部特征还是我做错了什么?

groovy named-parameters
1个回答
0
投票

引用关于特征和 AST 转换的 groovy 文档

Traits 与 AST 转换不正式兼容。其中一些(例如@CompileStatic)将应用于特征本身(而不是实现类),而其他一些将应用于实现类和特征。绝对不能保证 AST 转换会像在常规类上一样在特征上运行,因此使用它需要您自担风险!

我相信

NamedVariant
是一个 AST 转换,本质上意味着 groovy 文档告诉你不能保证这会起作用。

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.