我不太确定我所描述的事物的名称是否称为构造函数?但是,我想要做的是查看用于创建对象的构造函数。
Class Classname{
private int a, b, c;
public Classname(int a, int b){
this.a = a;
this.b = b;
}
public Classname(int a, int b, int c){
this.a = a;
this.b = b;
this.c = c;
}
}
如果我们创建对象:
Classname testobject = new Classname(1, 2);
我需要的是因为我需要获取对象中的可变数量以及这些变量的值。我们说以下是:
classname[] multiple = new classname[10]
那有" classname" - 来自两个构造函数的对象,我需要将这些对象写入字符串,所以我认为我必须以某种方式获得正确的构造函数,如果它是第一个
public static String getStringform(Classname classname){
String stringform;
if(constructor == 1)
stringform = String.valueOf(classname.a) +String.valueOf(classname.b);
else
stringform = String.valueOf(classname.a) +String.valueOf(classname.b) +String.valueOf(classname.c);
}
编辑:正如评论中所建议的那样,我制作了这样的新构造函数:
private int type;
private int a, b;
public Classname(int a, int b){
this.type = 1;
this.a = a;
this.b = b;
}
但即使是那种构造函数,当我试图获得"类型"在另一个班级制作的物品,我没有得到正确的类型..?使用followin时我得到 java.lang.NullPointerException :
public static String toString(Classname object){
if(object.type == 1) //<-- There's the exception
答案 0 :(得分:1)
只需在每个构造函数中添加打印消息或使用调试器
答案 1 :(得分:1)
您可以添加&#34;标记&#34;到您的班级(或使用Integer
并检查c
无效):
class Classname{
private int constructor; // the flag
private int a, b, c;
private Classname(int a, int b){
this.constructor = 1;
this.a = a;
this.b = b;
}
private Classname(int a, int b, int c){
this.constructor = 2;
this.a = a;
this.b = b;
this.c = c;
}
}
然后使用此标志:
public static String getStringform(Classname classname){
String stringform;
if(classname.constructor == 1) {
stringform = "" + classname.a + classname.b;
} else {
stringform = "" + classname.a +classname.b +classname.c;
}
return stringForm;
}
注意:我在""
中添加了getStringForm
,大括号和return语句,但仍然存在 问题(访问私有成员,私有构造函数,...... )
答案 2 :(得分:0)
答案很简单,如果在给定的类中没有指定构造函数,则使用默认构造函数,即没有像private Classname(){...}
这样的参数的构造函数,现在你有2个构造函数可以将它称为C1 private Classname(arg1, arg2){...}
和C2为private Classname(arg1, arg2, arg3){...}
因此,如果你创建的对象在创建对象时传递了2个整数,那么将使用C1,并且在传递3个整数时,C2将被调用。
在这里做一个注释,因为你已经创建了C1和C2所以默认构造函数不再适用于这个类。如果你想使用它也创建那个构造函数。
答案 3 :(得分:0)
您可能会遇到建模问题。
我只会有两个不同的类,这里是伪代码:
public class ClassWithTwoFields {
public final Object field1;
public final Object field2;
public ClassWithTwoFields(final Object f1, final Object f2) {
field1 = f1;
field2 = f2;
}
public String getStringform() {
return field1 + field2;
}
}
public class ClassWithThreeFields extends ClassWithTwoFields {
public final Object field3;
public ClassWithThreeFields(final Object f1, final Object f2, final Object f3) {
super(f1, f2);
field3 = f3;
}
public String getStringform() {
return field1 + field2 + field3;
}
}
答案 4 :(得分:0)
使用当前类,每个成员字段将(在构造函数运行之前)初始化为0(int字段的默认值)。因此,如果构造函数未初始化c
,则它将为零。
现在,这可能是c
的有效值,可以传递到设置c
的3参数构造函数中,因此您无法简单地检查c
是否为c
0
您可以通过多种方式解决此问题。有意义的将取决于字段的实际含义。但实质上它归结为记录boolean
是否已设置为有效值。
这可以简单到定义名为cIsValid
的{{1}}字段,并在构造函数中设置true
时将其设置为c
,false
不