Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 创建新对象时使用集合方法的替代方法_Java_Oop - Fatal编程技术网

Java 创建新对象时使用集合方法的替代方法

Java 创建新对象时使用集合方法的替代方法,java,oop,Java,Oop,因此,我试图创建一个程序,帮助我跟踪我的开支,我有一个问题,我如何创建我的对象 到目前为止,我一直在像这样创建我的对象: Grocery milk = new Grocery(); milk.setName("Milk"); milk.setCost(2.84); milk.setDate(30, 12, 2014); milk.setType("Food"); “我的杂货店”类别扩展了此费用类别: public Expense(){} public Expe

因此,我试图创建一个程序,帮助我跟踪我的开支,我有一个问题,我如何创建我的对象

到目前为止,我一直在像这样创建我的对象:

Grocery milk = new Grocery();

    milk.setName("Milk");
    milk.setCost(2.84);
    milk.setDate(30, 12, 2014);
    milk.setType("Food");
“我的杂货店”类别扩展了此费用类别:

public Expense(){}
public Expense(String name, Double cost, Calendar purchaseDate){
    name =  _name;
    cost = _cost;
    purchaseDate = _purchaseDate;

}
到目前为止,我的杂货店类只添加了另一个我称之为type的字符串参数,所以我的问题是:

与使用set方法为每个新创建的对象设置参数不同,我希望这样做:

Grocery milk = new Grocery("Milk", 2.84, ??Date??, "Food")
但是date参数比其他类型的string和double参数稍微复杂一些,有什么方法可以实现我想要的,或者使用set方法更好吗


提前感谢您的帮助。

您只需使用类型为的
对象即可

替代方法包括使用对象(具有更灵活/更强大的日期操作方法),或仅将日期存储为
字符串

至于决定是使用
setX()
方法还是使用全面的构造函数,除非有理由不这样做,否则您可以同时使用这两种方法,并在任何时候使用最合适的方法

进一步阅读:


您可以简单地使用类型为的
对象

替代方法包括使用对象(具有更灵活/更强大的日期操作方法),或仅将日期存储为
字符串

至于决定是使用
setX()
方法还是使用全面的构造函数,除非有理由不这样做,否则您可以同时使用这两种方法,并在任何时候使用最合适的方法

进一步阅读:


为什么不尝试将
date
存储为字符串或a?这与您的问题无关,但对于这样的值类,我强烈建议将它们也设置为不可变的-将它们的所有字段标记为
final
,并在构造函数中设置它们。这使得许多事情更容易进行推理,并且还可以捕捉到
费用
构造函数中的bug,在这里您根本不设置字段!(将方法参数设置为字段(默认)值,而不是相反的方式。)将日期作为基本值传递给构造函数,该构造函数接受基本值并将其视为历元秒。为什么不尝试将
date
存储为字符串或字符串?这与您的问题无关,但是对于像这样的值类,我强烈建议将它们也设置为不可变的-将它们的所有字段标记为
final
,并在构造函数中设置它们。这使得许多事情更容易进行推理,并且还可以捕捉到
费用
构造函数中的bug,在这里您根本不设置字段!(您将方法参数设置为字段(默认)值,而不是相反。)将日期作为基本值传递给构造函数,该构造函数接受基本值并将其视为历元秒。这个答案是正确的。但是请注意,与java捆绑在一起的java.util.Date和.Calendar类是出了名的麻烦。许多人转而使用java 8中内置的库或新的java.time包(受Joda time的启发)。看,这个答案是正确的。但是请注意,与java捆绑在一起的java.util.Date和.Calendar类是出了名的麻烦。许多人转而使用java 8中内置的库或新的java.time包(受Joda time的启发)。看见
DateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");
Date date = formatter.parse("16/01/2015");

Grocery milk = new Grocery("Milk", 2.84, date, "Food")