Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Escape from Java
Search
Roberto Orgiu
June 08, 2018
Programming
0
92
Escape from Java
Slides of the talk I gave at Kotlin Night Torino 2018
Roberto Orgiu
June 08, 2018
Tweet
Share
More Decks by Roberto Orgiu
See All by Roberto Orgiu
Wellness & Droid
tiwiz
0
80
Behind the curtains
tiwiz
0
24
The Importance of Being Tested
tiwiz
0
310
An Android Dev start to Kotlin MPP
tiwiz
0
110
Fantastic API and where to find them
tiwiz
0
40
Flipping the Koin @ GDG Dev Party
tiwiz
1
34
Flipping the Koin
tiwiz
2
120
Trip into the async world @ NYC Kotlin Meetup
tiwiz
0
66
Trip into the async world
tiwiz
1
87
Other Decks in Programming
See All in Programming
Modern Angular: Renovation for Your Applications
manfredsteyer
PRO
0
140
AWS CDKにおける「再利用性」を考える / aws-cdk-reusability
gotok365
6
1.3k
ドメイン駆動設計の実践
masuda220
PRO
17
5.1k
CSC307 Lecture 13
javiergs
PRO
0
150
Google's Recipe for Scaling (Web) Security – LocoMocoSec 2024
lweichselbaum
0
170
君たちはどうコードをレビューする (される) か / 大吉祥寺.pm
utgwkk
15
8.5k
Prompt FlowによるLLMアプリケーション開発
yuto2000
1
1k
CSC307 Lecture 07
javiergs
PRO
0
220
Jetpack for KMP
fornewid
1
290
実用的かつリーズナブルな 「Azure × Gemini × LINE」~キャラクターBot 実装ライブデモ~
tomodo_ysys
1
170
How to use Macrobenchmark
veronikapj
0
160
SDCon2024: Enabling DevOps and Team Topologies thru architecture: architecting for fast flow
cer
PRO
0
780
Featured
See All Featured
Leading Effective Engineering Teams 2024
addyosmani
3
300
The World Runs on Bad Software
bkeepers
PRO
63
11k
10 Git Anti Patterns You Should be Aware of
lemiorhan
652
58k
Why You Should Never Use an ORM
jnunemaker
PRO
51
8.9k
Scaling GitHub
holman
458
140k
Designing for Performance
lara
604
67k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
16
1.6k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
226
52k
It's Worth the Effort
3n
181
27k
Side Projects
sachag
451
42k
BBQ
matthewcrist
82
9k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
78
15k
Transcript
Escape from Java The Java Programming Language™
Rob
Why Kotlin?
Why Kotlin? Less Libraries
Why Kotlin? Less Libraries More readability
Why Kotlin? Less Libraries More readability Many functions out of
the box
Why Kotlin? Less Libraries More readability Many functions out of
the box
False myths
False myths Budget
False myths Budget Tooling
False myths Budget Tooling Learning curve
False myths Budget Tooling Learning curve
public class Model { private String property; private int anotherProperty;
private float wowAnotherProperty; private double pleaseStahpDude; public String getProperty() { return property; } public void setProperty(String property) { this.property = property; } public int getAnotherProperty() { return anotherProperty; } public void setAnotherProperty(int anotherProperty) {
} public void setAnotherProperty(int anotherProperty) { this.anotherProperty = anotherProperty; }
public float getWowAnotherProperty() { return wowAnotherProperty; } public void setWowAnotherProperty(float wowAnotherProperty) this.wowAnotherProperty = wowAnotherProperty; } public double getPleaseStahpDude() { return pleaseStahpDude; } public void setPleaseStahpDude(double pleaseStahpDude) { this.pleaseStahpDude = pleaseStahpDude; } }
public class Model { private String property; private int anotherProperty;
private float wowAnotherProperty; private double pleaseStahpDude; public String getProperty() { return property; } public void setProperty(String property) { this.property = property; } public int getAnotherProperty() { return anotherProperty; } public void setAnotherProperty(int anotherProperty) { this.anotherProperty = anotherProperty; } public float getWowAnotherProperty() { return wowAnotherProperty; } public void setWowAnotherProperty(float wowAnotherProperty) { this.wowAnotherProperty = wowAnotherProperty; } public double getPleaseStahpDude() { return pleaseStahpDude; } public void setPleaseStahpDude(double pleaseStahpDude) { this.pleaseStahpDude = pleaseStahpDude; } }
public class Model { private String property; public String getProperty()
{ return property; } public void setProperty(String property) { this.property = property; } }
public class Model { private final String property; public Model(String
property) { this.property = property; } public String getProperty() { return property; } }
import android.support.annotation.Nullable; public class Model { private final @Nullable String
property; public Model(@Nullable String property) { this.property = property; } @Nullable public String getProperty() { return property; } }
public class Model implements Parcelable{ private final @Nullable String property;
public Model(@Nullable String property) { this.property = property; } protected Model(Parcel in) { property = in.readString(); } @Override public void writeToParcel(Parcel dest, int flags) { dest.writeString(property); } @Override public int describeContents() { return 0; } public static final Creator<Model> CREATOR = new Creator<Model>() { @Override public Model createFromParcel(Parcel in) { return new Model(in); } @Override public Model[] newArray(int size) { return new Model[size]; } }; @Nullable public String getProperty() { return property; } }
import android.os.Parcelable import kotlinx.android.parcel.Parcelize @Parcelize data class Model(val property: String?)
: Parcelable
AutoValue Guava Immutables Parceler Annotations
GSON uses Reflection
GSON uses Reflection Custom TypeAdapters
GSON uses Reflection Custom TypeAdapters Vimeo Stag to generate code
GSON uses Reflection Custom TypeAdapters Vimeo Stag to generate code
Moshi
RxJava+ Retrofit
Coroutines+ Retrofit
Retrofit.Builder() .addCallAdapterFactory(RxJava2CallAdapterFactory.create()) .baseUrl(BuildConfig.API_ENDPOINT) .build()
Retrofit.Builder() .addCallAdapterFactory(RxJava2CallAdapterFactory.create()) .baseUrl(BuildConfig.API_ENDPOINT) .build() interface ApiService { @GET("home") fun home():
Single<HomeResponse> }
Retrofit.Builder() .addCallAdapterFactory(CoroutineCallAdapterFactory()) .baseUrl(BuildConfig.API_ENDPOINT) .build()
Retrofit.Builder() .addCallAdapterFactory(CoroutineCallAdapterFactory()) .baseUrl(BuildConfig.API_ENDPOINT) .build() interface ApiService { @GET("home") fun home():
Deferred<HomeResponse> }
Coroutines do not replace RxJava
Guava
Guava Collections getFirst() getLast() concat() addAll() contains() isEmpty() toImmutableList()
Guava Collections getFirst() getLast() concat() addAll() contains() isEmpty() toImmutableList() Strings
join() split() trim() any() whitespace()
Guava Collections getFirst() getLast() concat() addAll() contains() isEmpty() toImmutableList() Strings
join() split() trim() any() whitespace() Optionals
Guava Collections getFirst() getLast() concat() addAll() contains() isEmpty() toImmutableList() Strings
join() split() trim() any() whitespace() Optionals Ranges
Guava Collections getFirst() getLast() concat() addAll() contains() isEmpty() toImmutableList() Strings
join() split() trim() any() whitespace() Optionals Ranges
AutoValue Guava Immutables Parceler Annotations Guava Collections RetroLambda Project Lombok
None
open.nytimes.com @nytdev github.com/NYTimes developers.nytimes.com
QA &