Java泛型:此模式的意图是什么?

Tho*_*sch 1 java generics jenkins-api

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

Class Run<JobT extends Job<JobT,RunT>,RunT extends Run<JobT,RunT>>

来自:https : //javadoc.jenkins.io/hudson/model/Run.html

Joa*_*uer 5

定义彼此密切相关的两种类型是一种稍微复杂但合理的通用方式,并且应始终串联使用。

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 “知道” 运行类型(即具有类型参数),否则这将无法引用特定的“运行/作业”类,并且会迅速演变为手动转换为特定类别。