Like C (alongside C++) and UNIX, JavaScript and Web, CLR and C#, JVM and Java are designed together, and have first class tooling in all Java IDEs.
Just saying, kotlin wasn't just a more aesthetically pleasing java, there were some deeper benefits as far as i can tell.
private Map<String, Client> clients;
public Map<String, Client> getClients() {
return clients;
}
public void setClients(Map<String, Client> clients) {
this.clients = clients;
}
Kotlin's approach, where you declare and instantiate a property, and the getter/setter/backing storage are synthesized for you, is vastly preferable to me: public var clients = emptyMap<String, Client>()https://github.com/apache/solr/blob/main/solr/core/src/java/...
I'm a little surprised it was in literally the first place I looked, but I'm not surprised that it was easy to find. "Use private ivars and write getters and setters to encapsulate your state" was probably the second thing that a generation of CompSci students learned in their first programming class, right after "an object is an instance of a class."
Right at the top of the file...
> /* QueryParser.java / / Generated By:JavaCC: Do not edit this line. QueryParser.java */
I'm not claiming you're not going to see properties written out. I'm just saying that's not the majority of code you're going to see and to claim that idiomatic Java is all getters and setters is a bit far fetched.
Here is what I would consider modern idiomatic Java, immutable records and immutable classes that may expose some of their state:
https://github.com/jstachio/jstachio/blob/main/compiler/apt/... https://github.com/jstachio/jstachio/blob/main/compiler/apt/...
Setters are needed in exceedingly rarely circumstances.
$ kotlin
Welcome to Kotlin version 1.6.10 (JRE 21.0.1+12-Debian-2)
Type :help for help, :quit for quit
>>> val b=ByteArray(1);
>>> b[0] == 0;
error: operator '==' cannot be applied to 'Byte' and 'Int'
b[0] == 0;
^
$ jshell
| Welcome to JShell -- Version 21.0.1
| For an introduction type: /help intro
jshell> byte[] ba={0}
ba ==> byte[1] { 0 }
jshell> ba[0]==0
$2 ==> true
upd: formatMy main reason for using it for my personal hobby projects is because I prefer another IDE.
And Kotlin is only supported by IntelliJ, which I admit is a really good ide, but not my favorite.
I am happy to be wrong now though.
Edit, this is a good step forward, here is the list from NetBeans, the "Toyota Hilux" of IDEs and my favorite:
Language Feature Support Status
File type recognition √
Project type
Semantic syntax highlighting √
Formatting √
Braces matching √
Code completion √
Error Hints/Fixes/Suggestions
Code templates
Refactoring
Debugging
At the pace this is moving now I don't know what will stop me from only using Kotlin in the feature.Code completion
Linting
Semantic highlighting
Debugging
Go-to-definition
Signature help
Hover
Formatting
Document symbols
Find references