问题描述
我正在用 Java 编写一个 gradle 插件。为了使其可配置,我想定义一个扩展对象。由于这本质上是一个值对象,我想我会使用 Immutables 来定义类,以减少代码量。然而,结果证明这很困难,我想知道是否有可能?
我尝试的第一件事是定义一个简单的不可变类:
@Value.Immutable
public abstract class MyExtension {
public abstract String someField();
}
然后将其添加为扩展名:
project.getExtensions()
.create("extensionName",MyExtension.class);
这失败了:
> Failed to apply plugin 'my.plugin.id'.
> Could not create an instance of type com.palantir.gotham.ontology.GothamOntologyFragmentsPluginExtension.
> Could not generate a decorated class for type MyExtension.
> Cannot have abstract method MyExtension.someField().
使用接口而不是抽象类定义不可变会产生相同的错误。然后我尝试传递不可变类,使用:
project.getExtensions()
.create(TypeOf.typeOf(MyExtension.class),"extensionName",ImmutableMyExtension.class);
但是,这会失败并出现不同的错误:
> Failed to apply plugin 'my.plugin.id'.
> Could not create an instance of type ImmutableMyExtension.
> Class ImmutableMyExtension is final.
似乎 gradle 要求扩展类是可扩展的,而 immutables 总是生成 final
类。有什么办法可以让它发挥作用吗?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)