以下是Jenkins中定义的Job类:
public abstract class Job <JobT extends Job<JobT, RunT>, RunT extends Run<JobT, RunT>>
extends AbstractItem implements ExtensionPoint, StaplerOverridable, ModelObjectWithChildren {
代码注释如下
/ **
* {@link Job}的特定执行 *
*自定义{@link Run}类型始终与
一起使用 *自定义{@link Job}类型,因此没有单独的注册
*自定义{@link Run}类型的机制 *
* @author Kohsuke Kawaguchi
* @see RunListener
* /
以下是Jenkins中定义的Run类:
public abstract class Run <JobT extends Job<JobT,RunT>,RunT extends Run<JobT,RunT>>
extends Actionable implements ExtensionPoint, Comparable<RunT>, AccessControlled, PersistenceRoot, DescriptorByNameOwner, OnMaster {
代码评论如下:
/ **
*在哈德森的监督下,工作是一个可运行的实体 *
*每次“运行”时,它都会被记录为{@link Run}对象 *
*要创建自定义作业类型,请扩展{@link TopLevelItemDescriptor}并将{@link Extension}放在其上。
*
* @author Kohsuke Kawaguchi
* /
现在我陷入了
<JobT extends Job<JobT, RunT>, RunT extends Run<JobT, RunT>>
一部分。它看起来很奇怪(就像对方的循环引用),对我来说,这很难理解。那么,如何理解这种代码设计呢?任何建议或分析都将受到欢迎和赞赏。谢谢。