【问题标题】:Examples of open-source code which contain extensive examples of Immutable classes? [closed]包含大量不可变类示例的开源代码示例? [关闭]
【发布时间】:2010-07-18 21:01:31
【问题描述】:

我正在寻找用 Java 开发的不可变类的实际示例。为了允许找到那些旨在不可变的类,如果代码使用@Immutable 注释或以其他方式记录的旨在不可变的类,这将很有帮助。我还需要能够研究这些类的源代码,因此具有任何“只读”许可证的项目都是合适的。

关于所使用的@Immutable 注释,它是哪个 @Immutable 并不重要。所以无论注解是来自 JSR-305 还是 FindBugs,还是内部等,都无所谓,只是注解的简单名称是“Immutable”。同样,如果项目使用一致方式将类标记为不可变(类名约定、javadoc、标记接口等),这样我就可以搜索代码库并区分可变类和不可变类,这也是我要找的。​​p>

是否有包含大量不可变类示例的开源代码示例?

【问题讨论】:

  • 抱歉,什么都不知道,但如果您找到未完成的示例,将其作为补丁提交并提交,这似乎是一个有用的练习
  • 此链接对您有帮助吗? stackoverflow.com/questions/307232/immutable-beans-in-java/… @Immutable 但不是 interface Immutable 的任何原因?
  • @yclian: 只是在撰写本文时我从未想过使用标记接口 :) 我真正从每个代码库中追求的是一种一致的方式来查找打算成为的类不可变的。如果这意味着它是类名、字段名、包位置、javadoc 或其他任何内容的约定,那没关系,只要我能找到一个类何时应该是不可变的。
  • @yclian: 编辑得更清楚一点:)

标签: java open-source immutability


【解决方案1】:

这些库中的大多数类都是不可变的:

代码中没有Immutable 注释,很难,AFAIK。

编辑 该项目主要使用文档。但是,一个关键方面是:如果您不希望您的类是可变的,请不要提供(公共)setter。如果客户端代码无法修改对象的状态,那么您实际上就获得了一个不可变的类。这是一个原则,无论是 Joda 时间还是 joda 金钱使用。在我的脑海中,我无法在任何一个库中命名单个可变类(到目前为止,我只使用了不可变类,并且从未错过过可变版本。)

【讨论】:

  • 我会调查这两个,谢谢。尽管没有 Immutable 注释,但您知道项目用于区分不可变和可变的任何其他约定吗?
  • (re: edit) 为了清楚起见,我不是在寻找 how 来编写不可变的类,只是试图找到真正的开发人员按顺序提出的示例类使某个代码分析工具更加健壮:-)
  • 查看 Joda Time 代码,javadoc 中似乎一致提到“xxx 是线程安全且不可变的”。看起来对我的目的非常有用,+1。
猜你喜欢
  • 2011-01-24
  • 2010-11-21
  • 1970-01-01
  • 1970-01-01
  • 2010-12-25
  • 2011-03-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多