java - 如何创建一个改变 toString 方法提供的方法?
问题描述
如何创建一个方法“public void changeDisplay()”来改变 toString 方法提供的内容?
所以,要说清楚。这是一个例子。
主要方法:
sportWatch s = new sportWatch(0, 0, 0);
System.out.println(s);
s.setHeartRate(91);
s.changeDisplay();
System.out.println(s);
打印对象时 -> 输出:
时间:0:0:0
时间:0:0:0
由于 SportWatch 类中的 toString() 方法。
public String toString() {
String secStr = Integer.toString(this.sec);
String minStr = Integer.toString(this.min);
String hrStr = Integer.toString(this.hr);
return "Time: "+ hrStr + ":" + minStr + ":" + secStr ;
}
我不知道如何编写一个在时间和心率之间切换的 changeDisplay 方法。
PS。这是 setHeartRate 的方法
public void setHeartRate(int value) {
this.heartRate = value;
}
最终输出应如下所示:
时间:0:0:0
心率:91
每次我使用 changeDisplay 方法时,它都应该在时间和心率之间切换。
解决方案
将布尔值翻转为标志
正如Höhener 所评论的,在您的班级上创建一个boolean
成员字段。SportWatch
使用 if-then 测试来确定您是返回一种文本还是另一种,心跳或当前时间。在每次调用您的方法getDisplayText
时,翻转该真/假值,同时返回所需的文本。
如果您的对象SportWatch
可以跨线程使用,请使用 type 的成员字段AtomicBoolean
。(您还需要进行其他更改以使您的代码线程安全。)
枚举而不是布尔值
为了使您的代码更具自我记录性,请使用枚举对象而不是单纯的布尔值 true/false。
DisplayMode
用两个名为TIME
和的对象定义一个枚举HEART
。
enum DisplayMode { TIME , HEART ; }
将您的布尔成员字段替换为DisplayMode
名为currentDisplayMode
存储两个枚举对象之一的类型的字段。getDisplayText
测试每个枚举对象的存在以确定为您的方法返回哪种类型的文本。
当然,在每个请求上用另一个对象替换一个对象,而不是翻转布尔值。也许rotate
在枚举类上定义一个方法来获取下一个枚举对象。
使用枚举而不是布尔值还有另一个好处:枚举为将来可能有额外的显示模式做准备,超过两种。
toString
适用于程序员和测试人员,而不是用户
不要toString
在任何此业务逻辑中涉及覆盖。定义您的toString
方法以返回在用于调试和记录时有意义的文本。该toString
方法不打算在用户界面中使用。
java.time
不要重新发明计时。Java 拥有业界领先的日期时间处理框架java.time。所以使用它。
没有日期且没有区域/偏移量的时间由 表示LocalTime
。
但在真正的手表中,您将在Instant
内部进行跟踪。对于用户界面,您将应用时区 ( ZoneId
) 来获取ZonedDateTime
. 然后,您将使用用户选择的Locale
with自动进行本地化DateTimeFormatter.ofLocalizedTime
。
所有这些已经在 StackmOverflow 上多次介绍过。因此,搜索以了解更多信息。
推荐阅读
- ajax - 如何以类似于普通形式 POST 请求的方式在 Axios/Vue 中发送 Ajax 请求?
- elixir - 调试 Elixir 流
- javascript - 如何通过删除限制为 5 的旧元素来在数组中添加最近的元素?
- oracle - LIKE % 在 createQuery("") 中无法识别,但在 @Query("") 中工作
- python - ROS如何使用从一个回调函数到另一个回调函数的值
- python - 有人可以帮我删除这个函数的多个返回,使它只有一个返回吗?
- docker - 将 Envoy 设置为 Docker 容器内的反向代理
- ios - 使用笔记本电脑 react-native 在连接的 OS 设备上打开 DevMenu
- bash - 为什么 curl 不下载图片?
- angular - Angular 的 HttpClient 可以遵守 Content-Disposition 并允许保存文件吗?