我在 magnolia CMS 源代码中找到了这个类,它使用了我还不熟悉的类定义。任何了解以下代码样式用法的人都可以向我解释这到底是做什么的吗?
在此代码示例中,RenderingModel
和 RenderableDefinition
都是接口(interface)。据我所知,我们不能在一个类中实现两个接口(interface),但这里是通过其他方式实现的。有人可以特别向我解释以下行中使用的技术:
public class RenderingModelImpl < RD extends RenderableDefinition >
implements RenderingModel {
以下是您可以在 magnolia java docs 找到的完整类(class)
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;
}
}
最佳答案
这是 Java 泛型。 RD 被称为“类型参数”。 “RD extends RenderingDefinition”部分意味着您可以创建 RenderingModelingImpl 的实例,该实例使用作为 RenderingDefinition 子类的任何类进行参数化。
假设您有扩展 RenderingDefinition 的 Foo 类,您将能够进行此调用...
新的 RenderingModelImpl
这将产生这样的效果,即指定返回 RD 的此 RenderingModelImpl 实例上的任何方法都将返回 Foo。
有关泛型的许多简单示例,请参阅 Java 5 或更新版本中的 Java 集合(List、Set、Map 等)。
您关于不能实现两个接口(interface)的说法也不正确。 Java 类可以实现任意数量的接口(interface)。只有子类化才限于单个基类。
关于java - 以下 Java 代码行是什么意思,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4544158/