如何在API调用中使用多个通配符

时间:2014-07-29 16:49:58

标签: java generics bounded-wildcard anthill unbounded-wildcard

我正在使用Anthill(UrbanCode / IBM产品),其中一种方法需要java.lang.Class<? extends SourceConfig<?>> sourceConfigType类型的参数。

阅读tutorial on generics后,我发现类GitSourceConfigSourceConfig的子类,但我不明白SourceConfig<?>的泛型如何在此上下文中工作。有任何想法吗?

最终目标是获取GitSourceConfig个对象并调用getRepositoryUrl / setRepositoryUrl方法。 Anthill Pro API为here,我正在查看SourceConfig类。

2 个答案:

答案 0 :(得分:0)

示例java.lang.Class<? extends SourceConfig<?>> sourceConfigType中的通用bounded wildcard类型指定sourceConfigType任何类,可以被上限绑定 SourceConfig的类型。

从教程

开始
  

List<? extends Shape>是有界通配符的示例。的?代表一种未知类型,就像我们之前看到的通配符一样。但是,在这种情况下,我们知道这种未知类型实际上是Shape的子类型。 (注意:它可能是Shape本身,或者某个子类;它不需要字面上扩展Shape。)

注意 SourceConfig本身也是通用的,此处它使用的是常规无界通配符。

答案 1 :(得分:0)

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<?>>