| I'll go through a few of these, but not all: * Yes, the Kotlin type system is better, no question. And yet it doesn't really matter for 90% of code, Java's type system is "good enough". And in the places where it tends to suffer, IntelliJ ends up covering the ground anyway (validating various annotation values, spring properties, sql, etc). * The difference between nullable types and Optional<?> types is not material. TBH I quite like Optional<?> and how it meshes with streams. * "final by default" is indeed nice. But putting `final` everywhere (which we do) is at most a tiny annoyance. This is not material. * Clear type distinctions between mutable and readonly collections is better, but not material, because we treat all collections as immutable. * Java streams hit 90% good enough, and StreamEx tends to fill in another 9%. * We don't have pain points with mutating variables in closures because we don't use mutable variables. * We don't have problems with checked exceptions because we don't use checked exceptions (and when interfacing with foreign code that throws checked exceptions, we use @SneakyThrows or wrap). * Coroutines are a major net negative for Kotlin, and Loom is already here. After many years of async programming in JS/TS, Ruby, and (going back far enough) C++, I've concluded that async programming (and function coloring) is absolutely toxic and should be avoided unless it's absolutely required for performance (or the platform, ie GUIs). * Multiplatform support has great future potential, but it doesn't seem to be ready yet. I just started a greenfield project and _really_ wanted to use KMP. Decided against it in favor of a React frontend. I don't want to live on the bleeding edge, I have work to do. And I've been bitten by deadended technologies enough times in my life to know the risk isn't worth it. I could go on but I think you get the point - my Java looks like Kotlin, and the parts of Kotlin that would really diverge from my code aren't things I want. You could tell me that I should use coroutines everywhere and I just simply disagree. |