java - 使用 Java 从链式方法中的 Setter 和 Getter 方法中检索特定值
问题描述
我正在尝试使用 java 方法链接从 setter 方法中获取特定值。就像我们做 obj.setId(1).setValue(5) 一样。我们如何使用 obj.setId(1).getValue() 获得 value = 5;
这是主要课程
public class MenuDish {
private String name;
private double price;
private String description;
private int category;
private int spiciness;
private boolean healthy;
public MenuDish(){ //constrcutor
}
public MenuDish setPrice(double price){
if(price < 0.0){
this.price = 0.0;
}
else{
this.price = price;
}
return this;
}
public double getPrice() {
return this.price;
}
public MenuDish setDay(int day){
return new MenuDish();//just do nothing
}
}
子类
AdjustableMenuDish 类
public class AdjustableMenuDish extends MenuDish {
private int day;
private double price;
public AdjustableMenuDish(){ //constructor
setName(null);
setPrice(0);
setDescription(null);
setCategory(0);
setHealthy(false);
setSpiciness(0);
}
@Override
public MenuDish setDay(int day){
this.day = day;
return this;
}
}
在主要方法中,我正在尝试做这样的事情。
AdjustableMenuDish dish = new AdjustableMenuDish();
dish.setDay(0).setPrice(3.4);
dish.setDay(3).setPrice(7.4);
System.out.println(dish.setDay(0).getPrice());//--->output 7.4 but how to
get 3.4 instead of 7.4
基本上我试图从一天中得到具体的价格。
编辑
我想通过下面给出的 Junit 测试用例
@Test public void test_daily_prices() {
AdjustableMenuDish dish = new AdjustableMenuDish();
for (int i = MenuDish.MONDAY; i <= MenuDish.SUNDAY; i++) {
double p = 1.0+i;
double a = dish.setDay(i).setPrice(p).getPrice();
assertEquals(p, a, 0.0001);
}
for (int i = MenuDish.MONDAY; i <= MenuDish.SUNDAY; i++) {
double p = 1.0+i;
double a = dish.setDay(i).getPrice();
assertEquals(p, a, 0.0001);
}
}
预期失败 1.0 但为 7.0
解决方案
您需要将日期和价格配对在一起,而不是将它们作为MenuDish
. 您可以尝试以下方法:
class AdjustableMenuDish {
private double[] prices = new double[7]; // Assumes day as [0..6]
...
public AdjustableMenuDish setPrice(int day, double price) {
prices[day] = price;
return this;
}
public double getPrice(int day) {
return prices[day];
}
}
如果每道菜的价格根据日期不同而不同,则此代码可能在MenuDish
. 如果只是一些菜,那么它可能属于AdjustableMenuDish
.
鉴于价格实际上是每天的价格,我认为您应该将两者一起提交,即。在一种方法中(如上所述)。如果您真的想像现在一样坚持使用您的MenuDish
API,那么您可以尝试以下方法。这将跟踪当前日期。
class MenuDish {
private double[] prices = new double[7]; // Assumes day as [0..6]
private int day;
...
public MenuDish setDay(int day) {
this.day = day;
return this;
}
public MenuDish setPrice(double price) {
prices[day] = price;
return this;
}
public double getPrice() {
return prices[day];
}
}
推荐阅读
- c - 如何使用带指针的 For 循环消除最后一个零?
- python-3.x - 用 Python 生成所有 5 张牌扑克手
- python - Plotly:将数据框列中的特定聚类标签绘制为标记
- javascript - iOS 设备上的日期格式问题(vanilla JS)
- python - Dataframe - Pandas - 减去列的结果是错误的?
- c++ - 如何在 EC2 实例上部署我的 REST API
- python - Zlib 从 websocket 解压数据
- c++ - 无法获得 std::vector 的大小
读取二进制文件后 - c# - 如何在 WS2007FederationBinding 中指定发行者地址?
- regex - 正则表达式运算符和 grep -E 失败