java - 包含 java.util.Properties、sql.Date、util.Date 等不可修改扩展的库

标签 java

首先我要说的是,我相信不变性是人们可以做的最好的事情之一,可以提高可靠性、简单性并给予人们对系统的信心。不再担心防御性副本或值(value)观改变等,这对我来说是一件好事。

尽管如此,Collections 库的不可修改XXX 方法很简单,但它是一种呈现只读集合的​​简单方法,这是一件好事,可以保证内容的安全。它并不能解决宇宙中的所有问题,但拥有它是一件好事。

毕竟我正在寻找一个试图修复其他一些问题的库。

只读属性

  • r/o 会包装另一个属性
  • 扩展 java.util.Properties
  • 变异方法抛出 UOE。
  • keySet/valueSet View 等也应该是只读的

可变属性

  • map(例如 put)方法抛出 UOE
  • 只有像 setProperty 这样正确的 Properties 方法才可以工作。
  • 扩展 java.util.Properties

对于堆栈也重复属性练习。对 java.util.Date、java.sql.Date 等重复练习

请不要告诉我自己写,因为是的,我可以,但我希望这些无聊的事情已经完成了:)

最佳答案

我认为这样的库不存在。

但是,我不会告诉您自己编写,因为我认为这会浪费时间:

  • 对于java.util.Date在这种情况下,请使用 Joda 时间 API,其中基本日期/时间对象是不可变的。

  • 对于不可变的Properties案例,包裹 Properties不可修改的对象 Map .

  • 对于可变的 Properties案例,使用HashMap<String, String>而不是Properties .

  • java.sql.Date由于 JDBC 方法返回 java.sql.Date,这种情况很难解决。实例。

<小时/>

考虑一下这一点。数以百万计的 Java 程序员多年来一直没有这些 util 类的只读版本。显然没有人认为值得花时间创建/发布这样一个库。这告诉你一些事情吗?也许,这不是一个真正的问题?或者有更好的解决方案(例如 Joda 时间)。

例如,当我编写一个将 Properties 对象传递给某个方法的方法时,我会查看该方法的 API。它是否表示或暗示它修改/可能修改该对象?我关心的?除非这两个问题的答案都是"is",否则我不需要制作防御性副本。如果两个问题的答案都是"is",那么我确实需要制作一个防御性副本……而不可变对象(immutable对象)不是答案。

现在,如果从今天开始从头开始重新设计 Java,那么处理可变对象与不可变对象(immutable对象)的更好方法将成为议程上的首要任务。但事实并非如此。

但是,嘿,你可以自由地不同意我的观点并实现你自己的库。

关于java - 包含 java.util.Properties、sql.Date、util.Date 等不可修改扩展的库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5361826/

相关文章:

java - 如何在 Java 中将数字文件读入数组列表

java - 如何在ASM java中将ClassVisitor转换为ClassNode

java - 检测多个 BufferedImages Java 的冲突

Java 用不重复的记录填充数组

java - 在 JLayeredPane 上添加两个 JPanel 后没有任何输出

java - 从属性文件键生成字符串常量

java - JSTL 中的 Forloop 问题

java - 如何使用 spring data mongorepository 对嵌入数组进行排序和限制

java - StackOverflowError 集合::不可修改列表

java - 通用 for-each 循环的困难