我已经在Jenkins API中看到了这一点,并且我想了解这种模式的目的。我无法理解JobT
和RunT
的含义。Class Run<JobT extends Job<JobT,RunT>,RunT extends Run<JobT,RunT>>
来自:https://javadoc.jenkins.io/hudson/model/Run.html
最佳答案
定义彼此密切相关的两种类型是一种稍微复杂但合理的通用方式,应始终串联使用。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
“知道”(即具有类型参数的)作业类型,否则无法引用特定的“运行/作业”班级,并且很快将其转换为特定班级的人工演员。关于java - Java泛型:此模式的意图是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58270770/