我试图将布尔值从1个类传递给另一个类的构造函数。
基本上我的程序从Main开始如下:
boolean bbb = true;
System.out.println("Value of bbb " + bbb);
signup s = new signup(bbb);
s.signupnow(driver);
" bbb"的价值设置为true。
"注册"看起来像这样(我通过" bbb&#34的值;作为下一个构造函数的参数)
public class Signup {
boolean isStealthEnabled;
public Signup(boolean b)
{
this.isStealthEnabled = b;
System.out.println("Value of b inside \"Signup\" " + b);
}
Reg signup = new Reg(isStealthEnabled);
我将布尔值传递给" Reg"类。
但由于某种原因,显示的值(并执行为false)..
" Reg" class看起来像这样:
boolean isStealthEnabled;
public Reg(boolean isStealthEnabled) {
super(isStealthEnabled);
System.out.println("Value of isStealthEnabled inside of Reg " + isStealthEnabled);
}
StealthWatchDog watchdog = new StealthWatchDog(isStealthEnabled);
"格雷格"继承" Reg"类。
公共类Gmail注册扩展了注册{
//boolean isStealthEnabled;
public GReg(boolean isStealthEnabled) {
super(isStealthEnabled);
System.out.println("Value of isStealthEnabled inside of GReg " + isStealthEnabled);
}
StealthWatchDog watchdog = new StealthWatchDog(isStealthEnabled);
最初该值显示为true但是由于某些奇怪的原因变为false ..为什么会这样?
更新:
在我的测试中,当我尝试回显isStealthEnabled(或bbb)的值时,我得到以下内容:
Value of bbb true
Value of b inside StealthWatchDog false
Value of isStealthEnabled inside Reg false
Value of b inside StealthWatchDog false
Value of isStealthEnabled inside of GReg false
Value of b inside "Signup" true
显然,即使我在" Main"中首先调用它,注册仍在运行。
答案 0 :(得分:2)
boolean默认为false - 在构造函数运行之前构建Reg对象。
将Reg的构造移动到构造函数内部。
public class Signup {
boolean isStealthEnabled;
Reg signup;
public Signup(boolean b)
{
this.isStealthEnabled = b;
this.signup = new Reg(isStealthEnabled);
System.out.println("Value of b inside \"Signup\" " + b);
}
}
答案 1 :(得分:2)
您的代码中存在两个问题:
首先:
您必须使用正确的名称初始化您的班级。 您已将您的班级定义为"注册"但是你已经初始化了:
signup s = new signup(bbb);
问题在于它应该是:
Signup s = new Signup(bbb);
第二
您已将Reg元素声明为任何方法。它将初始化为:
boolean iStealthEnabled = false;
这是布尔值的默认值。它不会是你选择的那个,因为在初始化时它还没有被分配。
你必须在你的注册构造函数中初始化Reg类,然后它才能工作。
正确的代码将是
主要课程:
boolean bbb = true;
System.out.println("Value of bbb " + bbb);
Signup s = new Signup(bbb);
s.signupnow(driver);
注册声明将是:
public class Signup {
boolean isStealthEnabled;
Reg signup;
public Signup(boolean b)
{
this.isStealthEnabled = b;
System.out.println("Value of b inside \"Signup\" " + b);
signup = new Reg(isStealthEnabled);
}
答案 2 :(得分:1)
您不需要在子类中声明成员变量boolean isStealthEnabled;
。它可能会影响您在父类中设置的父类成员。
答案 3 :(得分:1)
请注意,您的主要代码应为
boolean bbb = true;
System.out.println("Value of bbb " + bbb);
Signup s = new Signup(bbb); // Changed first letter to capital
s.signupnow(driver);
这是因为类应该在Java中的CamelCase中。 见the documentation
答案 4 :(得分:1)
根据@Michael Watson的回答,我能够解决问题如下:
我改变了两个班级
public class Reg {
boolean isStealthEnabled;
StealthWatchDog watchdog;
public Reg(boolean isStealthEnabled)
{
this.isStealthEnabled = isStealthEnabled;
watchdog = watchdog = new StealthWatchDog(isStealthEnabled);
System.out.println("Value of isStealthEnabled inside Reg " + isStealthEnabled);
}
public class Signup {
boolean isStealthEnabled;
GReg signup;
public Signup(boolean b)
{
this.isStealthEnabled = b;
System.out.println("Value of b inside \"Signup\" " + b);
signup = new GReg(isStealthEnabled);
}
我赞美@Watson但是我自己添加了这个,因为它没有修复这两个类(虽然概念是相同的)