Well, technically the data inside an RDD (and the JavaRDD reference) is immutable, so the S4 construction made sense at first, but I guess by adding helper fields like isCached and isCheckpointed we are making it mutable. 

One option is to hide these fields inside the JavaAPI and keep the R object immutable, but I am not a big fan of that as making JavaAPI changes in Spark is more intrusive. RC classes definitely look more appealing -- I don't know much about them (more on this in the comment below).