gpt4 book ai didi

java - 将 java.sql.Date 类型的对象分配给 java.util.Date 变量是否安全?

转载 作者:行者123 更新时间:2023-11-29 04:52:30 25 4
gpt4 key购买 nike

在我们的数据库访问层中,我们使用数据类型java.sql.Date 来表示DATE 列,而在我们的bean 中,我们使用 java.util.Date(这是一个遗留应用程序)。

由于 java.sql.Date 扩展 java.util.Date,仅设置 java.sql.Date 对象是否安全我们像这样从 bean 中的 DB 层获取?

java.sql.Date sqlDate;
// bean.setValidFrom(java.util.Date validFrom)
bean.setValidFrom(sqlDate);

代码编译得很好。

最佳答案

不安全。即使 java.sql.Date extends java.util.Date,它也不是合适的子类型,因为它不是行为子类型。下面是一个示例,显示了这两种类型的行为方式有何不同:

// not really a date, but a Date
Date date1 = new Date(0L);
// really a date, but not a Date
java.sql.Date sqlDate = java.sql.Date.valueOf("1970-01-01");
// really a date, but a Date?
Date date2 = sqlDate;
// a Date with time
date1.getHours();
// a Date without time. <-- throws an IllegalArgumentException.
// Wait, exactly *which* argument is illegal?
date2.getHours();

您应该创建一个 java.util.Date 类型的新对象,像这样复制值:

java.sql.Date dateFromDb;
bean.setValidFrom(new java.util.Date(dateFromDb.getTime()));

幸运的是,使用 Java 8 后情况好多了。

关于java - 将 java.sql.Date 类型的对象分配给 java.util.Date 变量是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34908425/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com