为什么Date对象被设置成过时了
tags: Java基础
为什么Date对象被设置成过时了?
初期的时候学习Java都会用到Date这么一个对象,可我们都知道这个对象在书上是不推荐使用的。这是为什么呢???
由于Java是面向对象的语言,使用一个Date这么一个对象类描述时间是完全正确的:能够满足绝大多数人的需要、还能对其进行扩展!
那为什么我们不使用Date对象来操作时间了呢???因为它设计得不好!
Java对象的设计讲求封装性,而Date类仅仅是用来代表着时间点,操作时间应该由另外的类而负责!但Date对象却拥有了操作时间的方法。这是不合理的。
-
因此,我们要操作时间的话,往往使用Calendar类或者LocalDate类
Date对象的设计破坏了封装性!
当我们自定义类,里面的私有属性的类型为Date时,比如:
public class A{ private Date hiredate ; setHiredate(){} getHiredate(){ return hiredate; } } 复制代码
当有人需要该类的时间时,我们使用get方法把该成员变量返回出去。这是理所当然的,这是我们的规范。
可是,当外界拿到了我们的Date类型的成员变量时,可以使用Date.setTime()来改变对应的时间。而又因为我们的私有成员变量依赖于Date,因此修改Date的数据就相当于修改了我们的私有成员变量!
也就是说,外界拿到Date对象就可以修改我们私有成员变量的值了。并不是通过我们给出的接口来进行修改。这样就严重破坏了封装性!
当然了,我们是可以有另外的办法来对其补救的:
-
在返回Date对象的时候,我们返回一个拷贝,而不是把原本对象返回出去 这样做的话,我们就无需担心外界通过Date对象从而操作我们的私有变量了。
getHiredate(){ return (Date)hiredate.clone(); } 复制代码
上一篇:
IDEA上Java项目控制台中文乱码