Tho*_*sch 1 java generics jenkins-api
我已经在Jenkins API中看到了这一点,并且我想了解这种模式的目的。我无法掌握的意义JobT和RunT。
Class Run<JobT extends Job<JobT,RunT>,RunT extends Run<JobT,RunT>>
定义彼此密切相关的两种类型是一种稍微复杂但合理的通用方式,并且应始终串联使用。
JobT是既了解自己(Job<JobT)又了解RunT(,RunT)的特定作业类型。
以完全相同的方式RunT可以了解自己和自己JobT。
这样可确保Run.getNextBuild()始终可以返回自身的特定类型(无需RunT返回通用类型Run),并且getParent()可以返回特定类型JobT。
没有这两个参数,这样的代码将无法工作:
SomeSpecificRun myRun = ...;
SomeSpecificJob myJob = myRun.getParent();
SomeSpecificRun previousSuccessfulRun = myJob.getPreviousBuild();
Run Code Online (Sandbox Code Playgroud)
除非Job“知道”运行类型(即具有类型参数)和 Run “知道” 运行类型(即具有类型参数),否则这将无法引用特定的“运行/作业”类,并且会迅速演变为手动转换为特定类别。