3 ms·
Yes, case classes! I currently use Java for work and I cry a little inside every time I see big hashCode() methods, toString() methods and a chain of getXXX()/
by kentosi 10y ago
Yes, case classes!
I currently use Java for work and I cry a little inside every time I see big hashCode() methods, toString() methods and a chain of getXXX()/setXXX() methods when I know that a simple case class statement would have been all that was needed.
- merb 10y agowell if you don't need hashCode, copy, toString etc you can use: final class Data() { final int id; final String name; public Data(int id, String name) { this.id = id; this.name = name; } } No need for getter/setter. Still not as good as the scala one tought, but probably a little bit faster since it does not use accessor methods. P.S.: I'm a scala user.
- lmm 10y agoFor the sake of comparison the Scala equivalent of those 8 lines is: case class Data(id: Int, name: String) and comes with all the other things merb mentioned. And it's unlikely to be any slower in practice since the JIT can inline the access (not that method calls are ever likely to be a noticeable overhead anyway).
- jermo 10y agoI've found that Project Lombok solves this problem for me. Simply add a @Data or @Value annotation and it will generate getters/setters/hashCode/toString etc. https://projectlombok.org/features/Value.html https://projectlombok.org/features/Value.html
- lmm 10y agoI started with Lombok but found that you're effectivly writing a different language from Java anyway - all your tools (IDEs, code coverage, binary compatibility checking, build infrastructure... ) need to support it. So it's just as much effort as Scala, and gives you a lot less in return.