4 ms·
I agree very much. As far as I'm concerned Java's biggest failure, orders of magnitude worse than all others, is to make java.lang.String a final class.
by mtrimpe 15y ago
I agree very much.
As far as I'm concerned Java's biggest failure, orders of magnitude worse than all others, is to make java.lang.String a final class.
- masklinn 15y agoI don't know: 1. having nullable references by default strikes me as a bigger issue 2. I don't see any reason I'd want to subclass String, actually (though I could see wanting to create an alternate implementation e.g. ropes-based). So String being a final class makes perfect sense as far as I'm concerned (unless it were an interface or some sort of "proxy" class as is often done in Cocoa). On the other hand, I'd give a phalange to easily create an unrelated type (typesystem-wise) with the same implementation. What `newtype` provides in Haskell.
- riffraff 15y agohow would a nominally different string type be better than wrapping the string ? I mean I understand why having a Name, ZipCode or UUID stringish class helps ensure program correctness, I do not understand (out of ignorance) how it would improve your code vs a wrapper.
- masklinn 15y ago> how would a nominally different string type be better than wrapping the string ? * It is significantly less verbose, therefore simpler and more likely to be used at all. And less error-prone * It can provide string APIs working on itself (either by default or through the aliasing declaration) precluding the need to manually re-implement things like comparisons or printing
- mtrimpe 15y agoI must agree with the nullable one. Let's say the biggest failure that I haven't heard anyone else talk about. As per your #2, that's what I was hinting at except that the implementation effort of final vs. non-final is negligible, thus making it harder to excuse as far as I'm concerned.
- pjmlp 15y agoWhy a failure? String is final in most languages OO languages.
- Produce 15y agoI would consider having any final classes in a standard library to be a failure. One of the pillars of OOP is extensibility.
- pjmlp 15y agoThen you should learn about the fragile base class problem, http://www.cas.mcmaster.ca/~emil/Publications_files/MikhajlovSekerinski98FragileBaseClassProblem.pdf http://www.cas.mcmaster.ca/~emil/Publications_files/Mikhajlo... API design is a very complex issue. Any change in a base class can have unintended consequences. Specially in components sold as libraries to development companies, where you as a customer don't have access to the source code. You're right, one of the OOP pillars is extensibility, but inheritance is just one way of doing it.
- deleted 15y ago[deleted]
- soc88 15y agoReplied to the wrong comment?
- scanr 15y agoIt's amusing that in a thread about the advantages of Haskell, immutability is being identified as the largest failure a language has made. I don't think immutable Strings are a bad idea but I do think it's unfortunate that Java: - Made Strings immutable, used them everywhere, and only later worked out that perhaps CharSequence would have been better in a lot of places. - Didn't provide a sensible way to handle Object extensions
- ben0x539 15y agoA class being final means that you can't derive from it in Java, not that instances of the class are immutable.
- healthyahoo 15y agohttp://healthyahoo.net/weight_loss/10-tips-for-fast-weight-loss.html http://healthyahoo.net/weight_loss/10-tips-for-fast-weight-l...
- cashew 15y agoTo ensure immutability of a type in Java, you typically need to prevent it from being extended.
- yxhuvud 15y agoBiggest failure? try Integer(100) == Integer(100) and Integer(200) == Integer(200)