java - 在java接口(interface)声明中使用模板参数

标签 java templates interface prototype-pattern

我来自 C++,现在正在学习 Java 类(class),更具体地学习设计模式。上节课,教授给了我们一个示例项目来帮助我们开始使用Prototype模式,项目中有一个接口(interface)声明我不太理解(也没有问教授:/)

package pattern.prototype.impl;

public interface IPrototype<T extends IPrototype> extends Cloneable {

    //clone: Permite realizar una clonacion superficial del prototipo.
    public T clone();

    //deepClone: Permite realizar una clonación profunda del prototipo.
    public T deepClone();
}

任何人都可以给我一些关于参数 T 的使用的解释吗?在这种情况下IPrototype<T extends IPrototype> 。它在那里的目的是什么?这是必要的还是只是一种方法?

谢谢

最佳答案

这被称为“奇怪地重复出现的模板模式”。顾名思义,它是针对使用模板的 C++ 编写的代码而发现的,但是,该模式也适用于 Java 中的泛型。

这里我可以实现接口(interface)如下:

public class ConcretePrototype implements IPrototype<ConcretePrototype > {
    @Override
    public ConcretePrototype clone() { ... }

    @Override
    public ConcretePrototype deepClone() { ... }
}

注意重写方法的方法签名。基本接口(interface) IPrototype 不知道 ConcretePrototype,但是,通过使用 CRTP,我们可以强制 ConcretePrototype 返回其自己类型的值。

关于java - 在java接口(interface)声明中使用模板参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53439303/

相关文章:

c++ - 为什么这个模板总是评估为 false_type?

java - 未使用 TextButton 调用 Libgdx InputListener "exit()"

Java - 线程状态异常

java - 如何解决pojo中字符串/日期字段数据类型转换的问题?

templates - 有没有办法从字符串创建可迭代列表?

c++ - 我已经创建了一个模板函数,但在检查输入是奇数还是偶数时出现错误 C++

networking - Golang - 获取网络接口(interface)的混杂模式状态

delphi - 这两套代码有什么区别

arrays - 当它们看起来相同时,为什么编译器会说实现 "differs from the previous declaration"?

java - 如何使用存储库和 View 模型更新房间数据库中的字段