▲ | TZubiri a day ago | ||||||||||||||||||||||||||||
Only bad experience I remember from Java was the int/Integer primitive/object issue and boxing. Also of course the misuse and overuse of classes when designing systems, but the complexity at design time is also the counterpart of the ease of use of well designed APIs. I remember using an IDE to write some code and it skipped the whole documentation and run/compile error phase, I could just cast mismatching types as needed. Probably C# and Swift/Objective C would only be above Java as top languages, being actually funded by paying customers instead of used by companies that depend on volunteer developed open source software and end-users that equate paying for software with evilness. | |||||||||||||||||||||||||||||
▲ | voidfunc a day ago | parent | next [-] | ||||||||||||||||||||||||||||
Being forced to use anonymous classes to simulate lambdas prior to 8 was the biggest source of annoying boiler plate IMO and was genuinely a bad experience in sufficiently complex or large code bases. Everything beyond 8 has been nice to have but 8 was the big one. | |||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||
▲ | tetha a day ago | parent | prev | next [-] | ||||||||||||||||||||||||||||
> Only bad experience I remember from Java was the int/Integer primitive/object issue and boxing. Heh, I once had to work in a code base that used an `Integer premiumDefenseLevel`. It contained the level of premium defense a player had purchased, or null if the player didn't have any levels of premium defense purchased in the recent times. This was in fact annoying to remove, because a 0 after a 1 was treated differently than a null some time for advertisement reasons: Someone who had bought premium defense in the past is more likely to re-buy than someone who didn't, so they are pestered with ads. But it eventually turned into a neat little domain object. | |||||||||||||||||||||||||||||
▲ | nananana9 a day ago | parent | prev [-] | ||||||||||||||||||||||||||||
> the int/Integer primitive/object issue and boxing. That's a deal-breaker. If you can't tie together a few values in a record/struct without being forced to box them/heap allocate them, the language will never be used anywhere where you even remotely care about performance. This is not a difficult problem to solve - C# did it in a very elegant way with structs, and as a direct result, probably for half of all videogames written today, the gameplay portion is written in C#. | |||||||||||||||||||||||||||||
|