KIt*_*tis 1 java inheritance extends class implements
我发现这个类在玉兰CMS源中使用了我不熟悉的类定义.任何知道如何使用以下代码样式的人都可以向我解释这究竟是什么吗?
在此代码示例中RenderingModel,RenderableDefinition它们都是接口.我知道我们不能在一个类中实现两个接口,但是这里通过其他方式实现.有人可以向我解释以下行中使用的技术,特别是:
public class RenderingModelImpl < RD extends RenderableDefinition >
implements RenderingModel {
Run Code Online (Sandbox Code Playgroud)
以下是您可以在magnolia java docs中找到的完整课程
public class RenderingModelImpl < RD
extends RenderableDefinition >
implements RenderingModel {
protected final RenderingModel parentModel;
protected final Content content;
protected final RD definition;
public RenderingModelImpl(Content content, RD definition, RenderingModel
parent) {
this.content = content;
this.definition = definition;
this.parentModel = parent;
}
public RenderingModel getParent() {
return this.parentModel;
}
public RenderingModel getRoot(){
RenderingModel model = this;
while(model.getParent() != null){
model = model.getParent();
}
return model;
}
public Content getContent() {
return this.content;
}
/**
* Shortname for templates: model.def.
*/
public RD getDef() {
return getDefinition();
}
public RD getDefinition() {
return this.definition;
}
public String execute() {
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
这是Java泛型.RD被称为"类型参数"."RD extends RenderingDefinition"部分意味着您可以使用RenderingDefinition的子类创建任何类参数化的RenderingModelingImpl实例.
假设您有扩展RenderingDefinition的类Foo,您将能够进行此调用...
new RenderingModelImpl <Foo>(...)
这将导致指定为返回RD的RenderingModelImpl实例上的任何方法都将返回Foo.
对于许多更简单的泛型示例,请参阅Java 5或更新版本中的Java集合(List,Set,Map等).
关于无法实现两个接口,您也是不正确的.Java类可以实现任意数量的接口.它只是子类,仅限于一个基类.