Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在java接口声明中使用模板参数 我来自C++,我现在正在学习java类,更具体地研究设计模式。上节课,教授给了我们一个示例项目来帮助我们开始原型模式,项目中有一个接口声明,我不太理解(也没有问教授:/) package pattern.prototype.impl; 公共接口IPrototype扩展了可克隆性{ //克隆:Permite Realizer una clonacion浅层del prototipo。 公共T克隆(); //deepClone:Permite Realizer una clonación prototipo深部。 公共T-deepClone(); }_Java_Templates_Interface_Prototype Pattern - Fatal编程技术网

在java接口声明中使用模板参数 我来自C++,我现在正在学习java类,更具体地研究设计模式。上节课,教授给了我们一个示例项目来帮助我们开始原型模式,项目中有一个接口声明,我不太理解(也没有问教授:/) package pattern.prototype.impl; 公共接口IPrototype扩展了可克隆性{ //克隆:Permite Realizer una clonacion浅层del prototipo。 公共T克隆(); //deepClone:Permite Realizer una clonación prototipo深部。 公共T-deepClone(); }

在java接口声明中使用模板参数 我来自C++,我现在正在学习java类,更具体地研究设计模式。上节课,教授给了我们一个示例项目来帮助我们开始原型模式,项目中有一个接口声明,我不太理解(也没有问教授:/) package pattern.prototype.impl; 公共接口IPrototype扩展了可克隆性{ //克隆:Permite Realizer una clonacion浅层del prototipo。 公共T克隆(); //deepClone:Permite Realizer una clonación prototipo深部。 公共T-deepClone(); },java,templates,interface,prototype-pattern,Java,Templates,Interface,Prototype Pattern,有谁能给我一些关于参数T在本文IPrototype中使用的解释吗。它在那里的目的是什么?这是必要的还是仅仅是一种方法 谢谢这被称为“奇怪的重复出现的模板模式”。顾名思义,它是用C++编写的,它使用模板,但该模式也适用于java中的泛型。 在这里,我可以实现如下接口: public class ConcretePrototype implements IPrototype<ConcretePrototype > { @Override public ConcretePr

有谁能给我一些关于参数
T
在本文
IPrototype
中使用的解释吗。它在那里的目的是什么?这是必要的还是仅仅是一种方法

谢谢

这被称为“奇怪的重复出现的模板模式”。顾名思义,它是用C++编写的,它使用模板,但该模式也适用于java中的泛型。 在这里,我可以实现如下接口:

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

    @Override
    public ConcretePrototype deepClone() { ... }
}
public类原型实现IPrototype{
@凌驾
公共原型克隆(){…}
@凌驾
公共克隆(){…}
}
请注意被重写方法的方法签名。基本接口
IPrototype
不知道
ConcretePrototype
,但是,通过使用CRTP,我们可以强制
ConcretePrototype
返回其自身类型的值。

这被称为“奇怪的重复出现的模板模式”。顾名思义,它是用C++编写的,它使用模板,但该模式也适用于java中的泛型。 在这里,我可以实现如下接口:

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

    @Override
    public ConcretePrototype deepClone() { ... }
}
public类原型实现IPrototype{
@凌驾
公共原型克隆(){…}
@凌驾
公共克隆(){…}
}

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

它不是模板参数,而是Java泛型类型,它代表实现给定接口的任何类。在原型模式的上下文中,它不是必需的,只是一个可能的实现。

它不是模板参数,而是Java泛型类型,它代表实现给定接口的任何类。在原型模式的上下文中,它不是必需的,只是一种可能的实现。

T是类型参数,也是泛型类型

T扩展了IPrototype:要声明有界类型参数,T可以是IPrototype的子类的任何类型

公共T克隆()返回类型将是泛型的


public T deepClone()返回类型将是泛型(意味着可以是任何类型)

T是类型参数,也是泛型类型

T扩展了IPrototype:要声明有界类型参数,T可以是IPrototype的子类的任何类型

公共T克隆()返回类型将是泛型的


public T deepClone()返回类型将是泛型(意思可以是任何类型)

顺便说一句,我很确定您使用的语法是错误的,因此最好还是通知您的讲师

问题是,
IPrototype
在这里被用作原始类型。第二次在行中使用时,它只是
IPrototype
,没有类型变量。这在Java中是一个禁忌

至于发生了什么,这意味着
IPrototype
的类型参数必须是
IPrototype
的一种类型,即
IPrototype
的某个子类。看看Java的
Enum
类型,它使用完全相同的模式:

公共接口IPrototype扩展了可克隆性{
//添加此项
//克隆:Permite Realizer una clonacion浅层del prototipo。
公共T克隆();
//deepClone:Permite Realizer una clonación prototipo深部。
公共T-deepClone();
}

顺便说一句,我很确定您使用的语法是错误的,因此最好还是通知您的讲师

问题是,
IPrototype
在这里被用作原始类型。第二次在行中使用时,它只是
IPrototype
,没有类型变量。这在Java中是一个禁忌

至于发生了什么,这意味着
IPrototype
的类型参数必须是
IPrototype
的一种类型,即
IPrototype
的某个子类。看看Java的
Enum
类型,它使用完全相同的模式:

公共接口IPrototype扩展了可克隆性{
//添加此项
//克隆:Permite Realizer una clonacion浅层del prototipo。
公共T克隆();
//deepClone:Permite Realizer una clonación prototipo深部。
公共T-deepClone();
}

这称为“好奇的重新出现模板模式”。java没有C++模板参数。这是一种Java泛型类型。它被命名为C++ >代码>,并声明<代码> t>代码>必须执行<代码> IPrototype < /C> >,也会说java泛型类型与C++模板完全不同。尽管语法相似,但要保持这两个不同的概念很重要。这叫做“好奇的重新出现模板模式”。java没有C++模板参数。这是一种Java泛型类型。它被命名为
T
,并声明
T
必须实现
IPrototype
还将说Java泛型类型
public interface IPrototype<T extends IPrototype<T>> extends Cloneable {
//                                              ^^^ add this

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

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