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

Java Generics: What is the intention of this pattern?

我在 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() 始终可以 return 自身的特定类型(如果没有 RunT 类型,它必须 return 通用 Run ) 并且 getParent() 可以 return 具体 JobT.

如果没有 这两个参数,这样的代码将无法工作:

SomeSpecificRun myRun = ...;
SomeSpecificJob myJob = myRun.getParent();
SomeSpecificRun previousSuccessfulRun = myJob.getPreviousBuild();

除非 Job "knows of"(即具有类型参数)运行 类型 and Run "knows of"(即有一个类型参数)工作类型,这不能引用特定的 Run/Job classes 并且会很快转变成手动转换为特定的 class.