I’m a backend developper, working on medium to big Spring Boot apps. Two years ago, we introduced Kotlin in our code base with really good results on code quality.<p>With Java 17, the gap is narrowing between Kotlin and Java. Kotlin has still unique features that I love (extension methods for instance), but the big one is nullability. You can use @Nullable/@NotNull annotations in Java but I largely prefer having nullability backed in types with Kotlin. Some people say nullability is not a problem: with 30 developers of various quality, I can ensure it is a problem. I don’t see Java addressing nullability in a better way in the near future, so I’m going to stick with Kotlin.
It would be interesting to see qualitative surveys of new Java code that appears eg on Github that would give information about whether the real-world practice in Java is converging toward expressivity of higher level languages and reduced incidental complexity.