我来自 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/