在jdk中是否有一个事实上的不可变类列表?
技术上不可变类包括明显的Integer,Double等.
事实上,不可变的将包括例如java.lang.String - 它在技术上可能是可变的,但实际上它不是.
另外,是否需要接口/抽象类(如javadoc中所述)是不可变的?
如果你不能提供一个完整的List,如果你知道一堆在javadoc中声明不变性的类,我会很高兴的.
kav*_*mre 19
我尝试尽可能多地编译列表:
您可以使用MutabilityDetector并从JDK中提取JAR以枚举大多数不可变类.它是"最"的,因为它非常严格,即使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