我已经在Jenkins API中看到了这一点,并且我想了解这种模式的目的。我无法理解JobTRunT的含义。

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/

10-11 19:59