Как использовать несколько подстановочных знаков в вызове API

Я работаю с Anthill (продукт UrbanCode/IBM), и для одного из методов требуется параметр типа java.lang.Class<? extends SourceConfig<?>> sourceConfigType,

Прочитав учебник по дженерикам, я обнаружил, что класс GitSourceConfig это подкласс SourceConfig но я не понимаю, как общий SourceConfig<?> работает в этом контексте. Есть идеи?

Конечная цель - получить GitSourceConfig возразить и вызвать getRepositoryUrl/setRepositoryUrl методы. Anthill Pro API здесь, и я смотрю на SourceConfig учебный класс.

2 ответа

Class является общим - если вы вызываете getClass() на String результат объекта будет иметь тип Class<String>,

В этом случае SourceConfig<R extends Repository> сам дженерик, так что вы вложили дженерики.

если вы проверите определение GitSourceConfig

public class GitSourceConfig extends SourceConfig<GitRepository> 

а также

public class GitRepository extends Repository

так Class<GitSourceConfig> Матчи Class<? extends SourceConfig<?>>

Общий ограниченный тип подстановочного знака в вашем примере java.lang.Class<? extends SourceConfig<?>> sourceConfigType указывает, что sourceConfigType любой класс, который может быть связан верхним пределом типа SourceConfig,

Из учебника,

List<? extends Shape> пример ограниченного символа подстановки? обозначает неизвестный тип, точно так же как символы подстановки, которые мы видели ранее. Однако в этом случае мы знаем, что этот неизвестный тип на самом деле является подтипом Shape, (Примечание: это может быть Shape сам или некоторый подкласс; это не должно буквально расширяться Shape.)

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

Другие вопросы по тегам