Complete List of immutable JDK classes?

前端 未结 3 1951
北海茫月
北海茫月 2020-12-14 23:49

is there a list of de-facto immutable classes in the jdk?

technically Immutable classes include the obvious Integer, Double etc..

de-facto i

相关标签:
3条回答
  • 2020-12-15 00:34

    Classes whose object contents cannot be modified is called immutable classes. All primitive data types(Wrapper classes only) are immutable. For any class to be immutable the following needs to be done.

    • Make all fields private
    • Don't provide mutators
    • Ensure that methods can't be overridden by either making the class final (Strong Immutability) or making your methods final (Weak Immutability)
    • If a field isn't primitive or immutable, make a deep clone on the way in and the way out.

    Thank you

    0 讨论(0)
  • 2020-12-15 00:42

    I try to compile the list as much as I can:

    1. java.lang.String The wrapper classes for the primitive types:
    2. java.lang.Integer
    3. java.lang.Byte
    4. java.lang.Character
    5. java.lang.Short
    6. java.lang.Boolean
    7. java.lang.Long
    8. java.lang.Double
    9. java.lang.Float
    10. java.lang.StackTraceElement (used in building exception stacktraces)
    11. Most of the enum classes
    12. java.math.BigInteger
    13. java.math.BigDecimal
    14. java.io.File
    15. java.awt.Font
    16. java.awt.BasicStroke
    17. java.awt.Color
    18. java.awt.GradientPaint,
    19. java.awt.LinearGradientPaint
    20. java.awt.RadialGradientPaint,
    21. java.awt.Cursor
    22. java.util.Locale
    23. java.util.UUID
    24. java.util.Collections
    25. java.net.URL
    26. java.net.URI
    27. java.net.Inet4Address
    28. java.net.Inet6Address
    29. java.net.InetSocketAddress
    30. most subclasses of java.security.Permission
    0 讨论(0)
  • 2020-12-15 00:45

    You can use MutabilityDetector and feed it JARs from the JDK to enumerate most immutable classes. It's "most" because it's so strict that even the tiny bit of state change in java.lang.String is enough to make it considered mutable, but the goal is to account for this by 1.0 release.

    You can download the latest JAR here: https://github.com/MutabilityDetector/MutabilityDetector/releases

    Here's an example of it's use. This is what I used to get most of the immutable JDK 1.7 classes on OSX:

    java -jar MutabilityDetector-0.9.5.jar -r IMMUTABLE -cp /Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home/jre/lib/rt.jar

    Here's the output (slightly cleaned up): https://gist.github.com/CalebFenton/85fc87edf64033afe110

    I needed to do this for Android framework classes. The tricky part was finding a JAR with Android classes, and not just stubs which is the one included in the SDK. The good people at Robolectric make one, which you can download here: http://search.maven.org/#search%7Cga%7C1%7Ca%3A%22android-all%22

    You can see the list of immutable Android classes I use, which includes many JDK classes here: https://github.com/CalebFenton/simplify/blob/master/smalivm/src/main/resources/immutable_classes.cfg

    0 讨论(0)
提交回复
热议问题