【发布时间】:2019-10-07 13:39:50
【问题描述】:
我在 Jenkins API 中看到了这一点,我想了解这种模式的目的。我无法理解JobT 和RunT 的含义。
Class Run<JobT extends Job<JobT,RunT>,RunT extends Run<JobT,RunT>>
【问题讨论】:
标签: java generics jenkins-api
我在 Jenkins API 中看到了这一点,我想了解这种模式的目的。我无法理解JobT 和RunT 的含义。
Class Run<JobT extends Job<JobT,RunT>,RunT extends Run<JobT,RunT>>
【问题讨论】:
标签: java generics jenkins-api
这是一种有点复杂但相当常见的方法来定义两个彼此密切相关的类型,并且总是应该串联使用。
JobT 是既了解自身 (Job<JobT) 又了解 RunT (,RunT) 的特定工作类型。
RunT 可以以完全相同的方式了解自己和JobT。
这确保Run.getNextBuild() 始终可以返回自身的特定类型(如果没有RunT 类型,它必须返回通用Run)并且getParent() 可以返回特定的JobT。
如果没有两个这两个参数,这样的代码将无法工作:
SomeSpecificRun myRun = ...;
SomeSpecificJob myJob = myRun.getParent();
SomeSpecificRun previousSuccessfulRun = myJob.getPreviousBuild();
除非Job“知道”(即有一个类型参数)运行类型和Run“知道”(即有一个类型参数)作业类型,这无法引用特定的 Run/Job 类,并且会很快演变为手动强制转换到特定类。
【讨论】: