| > Only reference types, the same as in golang Everything's a reference in Java except primitives, and even primitives get object wrappers. In Java, String, Long, and Bool can all be null. Go isn't like that—only explicit pointer types and interfaces can be nil. In practice it really cuts down on NPEs. > https://dev.java/learn/modules/ Ok, granted, but I have never seen these in actual use. Java's ecosystem is big enough that you can use Java for years and not even know it has modules. I find this profusion of features unboring for the same reason that C++ is unboring. In Go, everything's already in modules. It's just simpler. And when they did add generics, it was backwards-compatible, so there was no Java 8/Java 11 thing. > Furthermore, any non-trivial project is better served with an IDE In any other language, I can get by fine with vim + LSP regardless of project size. Java has a uniquely bad LSP story. |
Value types will have the ability not to be nullable, which is the same as golang.
Primitive wrappers are used to denote nullability, which golang also has in its sql package for example.
> I can get by fine with vim + LSP regardless of project size
Getting by is one thing, having strong introspection offered by sophisticated IDEs is another.