jdk中是否有事实上不可变类的列表?
技术上不可变类包括明显的Integer,Double等..
事实上,不可变的将包括例如java.lang.String - 它在技术上可能是可变的,但实际上它不是。
此外,是否需要接口/抽象类(如javadoc中所述)是不可变的?
如果你不能提供一个完整的List,如果你知道一堆在javadoc中声明不变性的类,我会很高兴。
答案 0 :(得分:5)
您可以使用MutabilityDetector并从JDK中提取JAR以枚举大多数不可变类。它是“最”的,因为它是如此严格,即使tiny bit of state change in java.lang.String足以使其被认为是可变的,但目标是通过1.0版本来解释这一点。
您可以在此处下载最新的JAR:https://github.com/MutabilityDetector/MutabilityDetector/releases
这是一个使用它的例子。这就是我以前在OSX上获得大多数不可变的JDK 1.7类的原因:
java -jar MutabilityDetector-0.9.5.jar -r IMMUTABLE -cp /Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home/jre/lib/rt.jar
这是输出(略微清理): https://gist.github.com/CalebFenton/85fc87edf64033afe110
我需要为Android框架类执行此操作。棘手的部分是找到一个带有Android类的JAR,而不仅仅是包含在SDK中的存根。 Robolectric的优秀人才会制作一个,您可以在此处下载:http://search.maven.org/#search%7Cga%7C1%7Ca%3A%22android-all%22
您可以看到我使用的不可变Android类列表,其中包含许多JDK类: https://github.com/CalebFenton/simplify/blob/master/smalivm/src/main/resources/immutable_classes.cfg
答案 1 :(得分:-6)
无法修改其对象内容的类称为不可变类。所有原始数据类型(仅限Wrapper类)都是不可变的。对于任何不可变的类,需要进行以下操作。
谢谢