为什么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();
}

复制代码
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(); } 复制代码
经验分享 程序员 微信小程序 职场和发展