下面的这个泛型代码有什么作用?

时间:2012-01-31 16:58:37

标签: java generics

我无法理解下面的泛型代码是做什么的。我是仿制药的新手所以非常感谢我能得到的所有帮助!

Public abstract class AMetadata< C extends CMetadata, P extends PMetadata, R extends   RMetadata> extends GEntityMetada<C> 
{ 
 // class does stuff here
}

有人可以解释这些课程是如何相关的吗?

4 个答案:

答案 0 :(得分:5)

这指定AMetadata类将处理三种通用定义的类型,每种类型都保证扩展不同的类型(CMetadataPMetadata和{{1} }, 分别)。

此外,RMetadata类本身扩展了AMetadata泛型类,其泛型参数是传递给的第一个泛型参数类型(GEntityMetada,它扩展了CCMetadata

要说明这些类是如何相关的,需要比这个代码片段提供更多的代码库知识。例如,单个类型实际上可以扩展CMetadata,PMetadata和RMetadata是可能的(尽管不太可能),因此该类型可以用作所有三个类的参数。但是这个通用定义中没有任何内容表明这三个类之间必须存在任何关系。

您可以从中获得的唯一其他信息是扩展AMetadata的类型是CMetadata类的有效通用参数。 GEntityMetada 是否需要扩展GEntityMetada的参数尚不清楚。

答案 1 :(得分:0)

它只是说明你愿意创建的AMetadata模板是什么。 我会使用短名称来表达清晰。因此,假设您的代码如下所示:

public abstract class AM <C extends CM, P extends PM, R extends RM> extends GM<C>

这意味着您可以创建AM对象,但您必须说明它应该具有哪种类型的元素。这是一个例子:

AM<CMChild, PM, RMChild> extends GM<CMChild>

答案 2 :(得分:0)

泛型类型参数是类的子类型,例如C是您示例中的CMetadata的子类型。

答案 3 :(得分:0)

类AMetaData扩展了一个GentityMetad类。所以它有一个通用参数C.我不知道GentityMetad是否对C有任何限制。

对于AMetadata,C上有一个附加要求:它必须扩展CMetadata。

此外,AMetaData类还有两个更通用的类型,P和R,它们必须分别扩展PMetadata和RMetadata。这些与GEntityMetad无关。