gpt4 book ai didi

gradle - 为什么不能以相同的方式访问 "dependsOn"和 "description"任务属性?

转载 作者:行者123 更新时间:2023-12-03 03:48:37 25 4
gpt4 key购买 nike

通过阅读 Gradle 文档,我发现 descriptiondependsOnTask 的属性(property)类(class)。
我们可以设置description属性(property)以不同的方式:

task MyTask
MyTask.description("This is MyTask")
MyTask.description "This is MyTask"
MyTask.description = "This is MyTask"

但即使 dependsOn也是一个属性,我们只能有:
task MyTask
task AnotherTask
MyTask.dependsOn(AnotherTask)
MyTask.dependsOn AnotherTask

因为无法使用:
MyTask.dependsOn = AnotherTask

错误是:

Cannot cast object 'task ':AnotherTask'' with class 'org.gradle.api.DefaultTask_Decorated' to class 'java.lang.Iterable'



我不明白它在幕后做了什么样的 Actor 。
是只涉及 = 的类型转换吗?属性的运算符?

最佳答案

您仍然可以使用 =运算符将值“分配”给 dependsOn属性,但您必须提供有效类型:

MyTask.dependsOn = [AnotherTask]

否则你会得到 ClassCastException :
> Cannot cast object 'task ':AnotherTask'' with class 'org.gradle.api.DefaultTask_Decorated' to class 'java.lang.Iterable'

时髦的 myTask.x = ...与调用 myTask.setX(...)方法

这是正确的行为——如果你看一下 org.gradle.api.Task界面源代码你会发现 description不是一个字段,而是一对 getter 和 setter 方法:
@Internal
String getDescription()

void setDescription(String var1);

这同样适用于 dependsOn “属性(property)”:
@Internal
Set<Object> getDependsOn()

void setDependsOn(Iterable<?> var1)

在这种情况下,Groovy 允许您像访问属性一样访问这两个方法,但它会将执行传递给这些方法。所以当你这样做时:
MyTask.description

您实际上调用了 MyTask.getDescription() .当你这样做时:
MyTask.description = 'This is description'

您实际上调用了 MyTask.setDescription('This is description') MyTask.dependsOn()案子

关于 dependsOn还有一件事值得一提案子。正如我之前提到的 org.gradle.api.Task界面包含 Set<Object> getDependsOn()void setDependsOn(Iterable<?> var1) .但这还不是全部。还有一种方法:
Task dependsOn(Object... var1);

它需要可变参数( Object 类型的单个参数或 Object[] 的数组)。在这种情况下,您可以执行以下方法调用:
MyTask.dependsOn AnotherTask // -> equivalent of MyTask.dependsOn(AnotherTask)
MyTask.dependsOn([AnotherTask] as Object[])

但你不能打电话:
MyTask.dependsOn [AnotherTask]
MyTask.dependsOn [AnotherTask] as Object[] // -> equivalent of (MyTask.dependsOn [AnotherTask]) as Object[]

第一种情况不起作用,因为您需要将集合显式转换为 Obejct[]大批。第二个也行不通,因为转换到 Object[]必须应用于参数。在这种情况下跳过括号会导致编译器尝试对方法的结果应用强制转换,我们最终得到 ClassCastException从第一个案例。

我希望它有所帮助。

关于gradle - 为什么不能以相同的方式访问 "dependsOn"和 "description"任务属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45908275/

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