Java Generics: Какова цель этого шаблона? - PullRequest
1 голос
/ 07 октября 2019

Я видел это в Jenkins API, и я хотел бы понять цель этого шаблона. Я не могу понять значения JobT и RunT.

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

От: https://javadoc.jenkins.io/hudson/model/Run.html

1 Ответ

5 голосов
/ 07 октября 2019

Это довольно сложный, но достаточно распространенный способ определения двух типов, которые тесно связаны друг с другом и всегда должны использоваться в тандеме.

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 и быстро превращается в ручное приведение к конкретному классу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...