java - 以下 Java 代码行是什么意思

标签 java class inheritance extends implements

我在 magnolia CMS 源代码中找到了这个类,它使用了我还不熟悉的类定义。任何了解以下代码样式用法的人都可以向我解释这到底是做什么的吗?

在此代码示例中,RenderingModelRenderableDefinition 都是接口(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/

相关文章:

class - 最佳实践 : How to Insert into Multiple Tables Through the Business Layer and Data Layer?

c++ - 类模板,预期的构造函数,析构函数

java - 继承的类是否实现了父类已经在java中实现的接口(interface)?

java - 使用response.getWriter()打印JSTL标签

java - 读取 BufferedReader 的内容时出现 NullPointerException,尽管它不为空

java - 我如何在 java 中切换红绿灯,因为每个灯应该使用多线程分别只吹 3 秒?

c# - 基类 - 是否应实现所有方法

java - 使用 ASM 库覆盖 Java 字节码中的局部变量名称

class - 在基类错误中找不到“GetCalcFields”

c++ - 虚拟继承和静态继承——C++中的混合