java - Java - 尝试同时传递无值和布尔值,但返回 null
问题描述
试图在为同一类设置的两个不同对象上传递不传递值和布尔值 true。
根据TestDriver:以下应该通过布尔值传递truepublic Iron(boolean val)
Metal m1 = new Iron(true);
System.out.println("Should be Iron->"+m1);
System.out.println("Should be Enchanted (True)->"+m1.isEnchanted());`
但是,作为 null 传递,就好像它没有到达这个构造函数一样。告诉我它不是试图用 Iron 的构造函数来查看 Metal 类吗?
第二段代码不提交任何值,但也返回 null。我尝试使用Boolean.parseBoolean()
以尝试将字符串转换为布尔值,反之亦然。
我已经尝试了很多不同的方法来让它工作,但是看不到任何地方,如果我遗漏了一些明显的东西,请告诉我。
干杯。
public class TestDriver {
public static void main(String[] args) {
Metal m1 = new Iron(true);
System.out.println("Should be Iron->"+m1);
System.out.println("Should be Enchanted (True)->"+m1.isEnchanted());
Iron i1 = new Iron();
System.out.println("Should not be Enchanted (False)->"+i1.isEnchanted());
}
}
public class Iron extends Metal {
public boolean isEnchanted(boolean val) {
boolean res = false;
if(val == true) {
res = true;
} else {
res = false;
}
return (res);
}
public Iron() {
}
public Iron(boolean val) {
boolean res = false;
if(val == true) {
res = true;
} else {
res = false;
}
//return (res);
}
}
传递真值时预期为真,不传递值时预期为假,但是在调用 isEnchanted 时 - 应该以某种方式调用。
解决方案
你没有包括你的Metal
课程,但我会放一个你在这里指定的工作示例来帮助你入门。
以下是Metal
我为满足您想要的要求而制作的课程:
public class Metal {
private boolean res;
private String name;
public Metal() {
this.res = false;
}
public Metal (boolean res, String name) {
this.res = res;
this.name = name;
}
public boolean isEnchanted() {
return res;
}
@Override
public String toString() {
return name;
}
}
我添加了一个name
要在您想要覆盖时使用的类字段,toString
因为您想在System.out.println
. toString()
除了名称之外,仍然可以修改以打印您想要的任何内容。
还要注意对IsEnchanted()
. 这应该只是return
类变量的一个,res
因此您可以看到该值设置为什么,您不应该在boolean
此处放入更改逻辑的逻辑。
您还尝试使用许多局部变量,这不是利用Object的正确方法。看看变量现在res
是如何在class
级别上的,您不再需要传递它,因为在第一次从构造函数设置它之后,您可以随时访问它。
这是对Iron
课程进行修改后的Metal
课程。Iron
请注意,此时在内部需要做的事情很少。我假设的大部分逻辑也会被其他Metal
s 使用,因此您现在可以extend
Metal
轻松地获取功能,例如 a Copper
now:
public class Iron extends Metal {
public Iron() {
}
public Iron(boolean val) {
super(val, "Iron");
}
}
这里要注意的最重要的事情是super(val, "Iron")
将res
参数传递给super
类的构造函数并将名称定义为的调用"Iron"
。本super
例中的类是Metal
.
现在您可以使用您的测试代码,它可以按预期工作:
public static void main(String args[]){
Metal m1 = new Iron(true);
System.out.println("Should be Iron->"+ m1);
System.out.println("Should be Enchanted (True)->" + m1.isEnchanted());
Metal i1 = new Iron();
System.out.println("Should not be Enchanted (False)->"+i1.isEnchanted());
}
输出:
应该是铁->铁
应该被附魔(真)->真
不应该被附魔(假)->假
推荐阅读
- python - 使用 torch.save 和 torch.load 继续培训 - 关键错误消息
- ios - 如何使用 for 循环通过 BLE 发送数据
- ios - 如何使用“XCODE”中的 Storyboard UI 对标题文本设置约束,使其大小相对于超级视图的大小?
- r - 无法在 Windows 10 上加载 rjag
- javascript - 在纯 css 中从左到右显示文本的效果
- ruby-on-rails - 是否可以在 Rails 6 中使用 .js.erb 文件?
- git - 为什么更改我的 SSH 密钥不会为我的提交显示正确的作者?
- python - Pandas:用较短的名称对长行值进行编码,并使用另一列值作为名称的一部分
- gradle - shadowJar 不包括依赖 jar,而是包括我的 Helidon Gradle 项目中的类
- r - 使用 GGplot 跳过多线图的 NA 值(并使用网格排列与另一个图结合)