4 ms·
For me that's almost all fields: I try to make just about everything immutable by default. Makes reasoning about concurrency much simpler.
by karlmdavis 12y ago
For me that's almost all fields: I try to make just about everything immutable by default. Makes reasoning about concurrency much simpler.
- lmm 12y agoFor immutable you can just use public final fields. I assume GP must be talking about fields that are mutated but only by the object itself, where outside code needs to be able to read but not write.
- stevoski 12y agoNot quite. eg: public final Date date; date.setTime(1); That's not immutable.
- lmm 12y agoThe bean convention doesn't help you with that one though; if you have private Date date; public Date getDate() {return date;} then people can still do getDate().setTime(1);
- cdmckay 12y agoYeah, but with a getter you can make getDate return a copy of the Date object to enforce immutability.
- cakeface 12y agoYeah, but getDate().setTime(1); works the same way.
- djur 12y agoNot if getDate() returns a copy of the underlying member.
- mateuszf 12y agoYep, the thing is that Date is immutable. I think that this public final immutable rule is ok, but one has to ensure the fields themself are really not modifiable.
- nl 12y agoThe fact that java.util.Date is terrible is so many ways should go without saying.