【问题标题】:Java Generics: What is the intention of this pattern?Java 泛型:这种模式的意图是什么?
【发布时间】:2019-10-07 13:39:50
【问题描述】:

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

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

发件人:https://javadoc.jenkins.io/hudson/model/Run.html

【问题讨论】:

    标签: java generics jenkins-api


    【解决方案1】:

    这是一种有点复杂但相当常见的方法来定义两个彼此密切相关的类型,并且总是应该串联使用。

    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“知道”(即有一个类型参数)作业类型,这无法引用特定的 Run/Job 类,并且会很快演变为手动强制转换到特定类。

    【讨论】:

      猜你喜欢
      • 2020-09-10
      • 2022-12-14
      • 1970-01-01
      • 2011-02-10
      • 1970-01-01
      • 2021-08-02
      • 2011-07-24
      • 2015-05-11
      • 1970-01-01
      相关资源
      最近更新 更多