我有这两个构造函数:
public StockItem(Long id, String name, String desc, double price) {
this.id = id;
this.name = name;
this.description = desc;
this.price = price;
}
public StockItem(Long id, String name, String desc, double price, int quantity) {
this.id = id;
this.name = name;
this.description = desc;
this.price = price;
this.quantity = quantity;
}
在另一个班级中这样做:
StockItem item2 = new StockItem();
item2.setId(Long.parseLong(idField.getText()));
item2.setName(nameField.getText());
item2.setDescription(descField.getText());
item2.setPrice((double) Math.round(Double.parseDouble(priceField.getText()) * 10) / 10);
item2.setQuantity(Integer.parseInt(quantityField.getText()));
System.out.println(item2);
输出结果为:
id, name, desc, price
为什么不把数量带入item2 ??? 如果我这样做:
System.out.println(Integer.parseInt(quantityField.getText()));
它能给我数量。
有人能告诉我为什么它没有意识到使用第二个StockItem构造函数。删除第一个StockItem构造函数后,即使尝试了它。
答案 0 :(得分:4)
对于一个你没有使用你在问题中显示的构造函数。您正在创建一个新对象,然后使用setter设置字段。您可能想要查看类的setQuantity方法,看看它在做什么。你不在这里使用任何一个构造函数。
尝试这样的方法来初始化你的对象:
StockItem item2 = new StockItem(Long.parseLong(idField.getText()), nameField.getText(), descField.getText(), (double) Math.round(Double.parseDouble(priceField.getText()) * 10) / 10, Integer.parseInt(quantityField.getText()));
它实际上会使用你的构造函数。
另请查看StockItem类的toString()方法。它可能不是打印数量。您需要在toString()方法输出中添加数量字段。
答案 1 :(得分:1)
在toString()
的{{1}}方法中,您还必须包含StockItem
。例如:
quantity
这样,当您执行public String toString() {
return id + ", " + name + ", " + description + ", " + price + ", " + quantity;
}
时,System.out.println(item2);
将会使用结果中包含的toString()
进行调用。
答案 2 :(得分:0)
您使用它的构造函数不在您显示的构造函数中。你确定你能够在不创建没有参数的新构造函数的情况下运行它吗?如果我没错,你应该像这样使用它们。如果您想使用第一个构造函数:
Long id = Long.parseLong(idField.getText());
String name = nameField.getText();
String desc = descField.getText();
double price = (double) Math.round(Double.parseDouble(priceField.getText());
StockItem stockItemUsingFirstConstructor = new StockItem(id, name, desc, price);
如果你想使用第二个构造函数:
Long id = Long.parseLong(idField.getText());
String name = nameField.getText();
String desc = descField.getText();
double price = (double) Math.round(Double.parseDouble(priceField.getText());
int quantity = Integer.parseInt(quantityField.getText());
StockItem stockItemUsingSecondConstructor = new StockItem(id, name, desc, price, quantity);
这称为重载。 :)
P.S:使用变量使其更清晰。 :)