我有一个有两个构造函数的类。
Class Sample{
private ClassOne classOne;
private ClassTwo classTwo;
private ClassThree classThree;
public Sample(){
classOne = new ClassOne();
classTwo = new ClassTwo();
classThree = new ClassThree();
}
public Sample(int id){
classOne = new ClassOne(id);
classTwo = new ClassTwo(id);
classThree = new ClassThree(id);
}
//some code here
}
有一个具有两个构造函数的类Sample。需要在Sample类中实例化另外三个类(ClassOne,ClassTwo和ClassIII)。所有三个类都包含默认和参数化构造函数。如果调用了Sample类的默认构造函数,则应调用ClassOne,ClassTwo和ClassIII的默认辅助构造函数。如果调用Samples参数化构造函数,则调用ClassOne、ClassII和ClassIII的参数化构造函数。
我写了上面的代码。有什么优雅的方法可以做到这一点吗?
您可以更改示例构造函数以接受整数对象参数。然后Sample的默认构造函数可以调用传递null的整数构造。您可以更进一步,更改ClassOne、Class2和Class3的构造函数,使其也接受整数对象参数,并优雅地处理null大小写:
class Sample {
private ClassOne classOne;
private ClassTwo classTwo;
private ClassThree classThree;
public Sample(){
this(null);
}
public Sample(Integer id){
super();
classOne = new ClassOne(id);
classTwo = new ClassTwo(id);
classThree = new ClassThree(id);
}
...
}
class ClassOne {
private int id;
public ClassOne(Integer id) {
super();
if (id == null) {
this.id = 0; // or whatever default value
} else {
this.id = id.intValue();
}
}
...
}
假设id
在示例
类中没有其他用途,则可以使用factory方法模式:
class Sample {
private ClassOne classOne;
private ClassTwo classTwo;
private ClassThree classThree;
Sample(ClassOne classOne, ClassTwo classTwo, ClassThree classThree) {
this.classOne = classOne;
this.classTwo = classTwo;
this.classThree = classThree;
}
public static Sample factory(int id) {
ClassOne classOne = null;
ClassTwo classTwo = null;
ClassThree classThree = null;
if ( id == -1 ) {
classOne = new ClassOne();
classTwo = new ClassTwo();
classThree = new ClassThree();
}
else {
classOne = new ClassOne(id);
classTwo = new ClassTwo(id);
classThree = new ClassThree(id);
}
return new Sample(classOne, classTwo, classThree);
}
}
您的特定示例在其原始表述中可能更清晰,但这是将复杂的构造逻辑从构造函数中移除的好方法。
为什么: 如果一个类不提供任何然后在编译时由编译器给出,但是如果一个类包含,那么默认构造函数不是由编译器提供。 我正在编译下面的代码。它给出了编译错误。 代码: 控制台错误: 当我只调用。工作正常。但是当您想使用参数化构造函数调用
若类有参数化的构造函数,为什么Java不提供默认构造函数?考虑下面的例子 这里我明确需要添加默认构造函数。有什么原因,为什么Java没有为具有参数化构造函数的类提供默认构造函数?
问题内容: 默认构造函数到底是什么?你能告诉我以下哪个是默认构造函数,它与其他构造函数有何不同? 问题答案: 他们都不是。如果定义,则不是默认值。 除非你定义另一个构造函数,否则默认构造函数是自动生成的无参数构造函数。任何未初始化的字段都将设置为其默认值。对于你的榜样,它看起来像这样假设的类型String,int以及int,那类本身是公共的: 这与 完全没有构造函数。但是,如果定义至少一个构造函数
图 6.1 time1.cpp 中的构造函数将 hour、minute 和 second 初始化为 0(即军用时间午夜11时)。 构造函数可以包含默认参数。图 6.8 重新定义 Time 的构造函数,该函数中每个变量的默认参数为0。通过提供构造函数默认参数,即使在构造函数调用中不提供数值,对象也能利用默认参数初始化为一致状态。程序员提供所有参数默认值(或显式不要求参数)的构造函数也称为默认构造函数
实际上,我不明白无参数构造函数和默认构造函数的区别是什么。 在创建名为cFrame的Test对象时,是否调用此类的默认构造函数?
本文向大家介绍解析C++中构造函数的默认参数和构造函数的重载,包括了解析C++中构造函数的默认参数和构造函数的重载的使用技巧和注意事项,需要的朋友参考一下 C++构造函数的默认参数 和普通函数一样,构造函数中参数的值既可以通过实参传递,也可以指定为某些默认值,即如果用户不指定实参值,编译系统就使形参取默认值。 【例】 程序运行结果为: 程序中对构造函数的定义(第12-16行)也可以改写成参数初始化