gpt4 book ai didi

groovy - Guice、Groovy、@Canonical 和继承不能很好地结合在一起

转载 作者:行者123 更新时间:2023-12-01 01:54:48 26 4
gpt4 key购买 nike

我有以下 Groovy 类:

enum Protocol {
File,
Ftp,
Sftp,
Http,
Https
}

@Canonical
abstract class Endpoint {
String name
Protocol protocol
}

@Canonical
@TupleConstructor(includeFields=true, includeSuperFields=true)
class LocalEndpoint extends Endpoint {
}

class MyAppModule extends AbstractModule {
@Override
protected void configure() {
// Lots of stuff...
}

// Lots of other custom providers

@Provides
Endpoint providesEndpoint() {
new LocalEndpoint('fileystem', Protocol.File)
}
}

不要担心我为什么要为 Endpoint 使用自定义提供程序而不仅仅是:
bind(Endpoint).toInstance(new LocalEndpoint('fileystem', Protocol.File))

我 99.999% 确定这不在此问题的范围内,并且由于完整(非常大)的代码是如何连接的,因此以这种方式编码。

我的问题是 Guice 和/或 Groovy 找不到 LocalEndpoint 的构造函数这需要一个 StringProtocol争论:
1) Error in custom provider, groovy.lang.GroovyRuntimeException: Could not find matching constructor for: com.example.myapp.model.LocalEndpoint(java.lang.String, com.example.myapp.model.Protocol)
at com.example.myapp.inject.MyAppModule.providesEndpoint(MyAppModule.groovy:130)
while locating com.example.myapp.model.Endpoint
for parameter 2 at com.example.myapp.inject.MyAppModule.providesConfig(MyAppModule.groovy:98)
at com.example.myapp.inject.MyAppModule.providesConfig(MyAppModule.groovy:98)
while locating com.example.myapp.config.MyAppConfig

然后它会吐出一个大的堆栈跟踪,其中列出了以下原因:
Caused by: groovy.lang.GroovyRuntimeException: Could not find matching constructor for: com.example.myapp.model.LocalEndpoint(java.lang.String, com.example.myapp.model.Protocol)
at groovy.lang.MetaClassImpl.invokeConstructor(MetaClassImpl.java:1731)
at groovy.lang.MetaClassImpl.invokeConstructor(MetaClassImpl.java:1534)

希望这是我可以通过修改 Endpoint 来调整的东西和/或 LocalEndpoint ,也许我需要将一些特殊参数传递到 @Canonical 中/ @TupleConstructor注释什么的。有任何想法吗?

最佳答案

我认为您需要添加 includeSuperProperties TupleConstructor注释,这似乎可以解决它,即使是它本身:
@TupleConstructor(includeSuperProperties=true)
所以整个事情将是:

@Canonical
abstract class Endpoint {
String name
Protocol protocol
}

@Canonical // You may not need this anymore
@TupleConstructor(includeSuperProperties=true)
class LocalEndpoint extends Endpoint {
}

关于groovy - Guice、Groovy、@Canonical 和继承不能很好地结合在一起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41385283/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com