ู
ู ุงูุฎุงุฑุฌ ุ ูุฏ ูุจุฏู ุฃู Kotlin ูุงู
ุจุชุจุณูุท ุชุทููุฑ Android ุฏูู ุฅุฏุฎุงู ุตุนูุจุงุช ุฌุฏูุฏุฉ ุนูู ุงูุฅุทูุงู: ุงููุบุฉ ู
ุชูุงููุฉ ู
ุน Java ุ ูุฐูู ูู
ูู ุชุฑุฌู
ุฉ ู
ุดุฑูุน Java ูุจูุฑ ุฅูููุง ุชุฏุฑูุฌููุง ุฏูู ุฅุฒุนุงุฌ ุฃู ุดุฎุต ุ ุฃููุณ ูุฐููุ ูููู ุฅุฐุง ูุธุฑุช ุฃุนู
ู ุ ููุฌุฏ ูู ูู ุตูุฏูู ูุงุน ู
ุฒุฏูุฌ ุ ููู ุทุงููุฉ ุงูุฒููุฉ ููุฌุฏ ุจุงุจ ุณุฑู. ูุบุงุช ุงูุจุฑู
ุฌุฉ ูู ู
ุดุงุฑูุน ู
ุนูุฏุฉ ููุบุงูุฉ ุจุญูุซ ูุง ูู
ูู ุฏู
ุฌูุง ุจุฏูู ูุฑูู ุฏูููุฉ.
ุจุงูุทุจุน ุ ูุฐุง ูุง ูุนูู ุฃู "ูู ุดูุก ุณูุฆ ููุง ุชุญุชุงุฌ ุฅูู ุงุณุชุฎุฏุงู
Kotlin ู
ุน Java" ุ ูููู ูุฐุง ูุนูู ุฃูู ูุฌุจ ุนููู ู
ุนุฑูุฉ ุงููุฑูู ุงูุฏูููุฉ ูุฃุฎุฐูุง ุจุนูู ุงูุงุนุชุจุงุฑ. ูู ู
ุคุชู
ุฑ
Mobius ูุฏููุง ุ
ุชุญุฏุซ ุณูุฑุฌู ุฑูุงุจูู
ุนู ููููุฉ ูุชุงุจุฉ ุงูุชุนููู
ุงุช ุงูุจุฑู
ุฌูุฉ ุนูู Kotlin ูุงูุชู ูู
ูู ุงููุตูู ุฅูููุง ุจุณูููุฉ ู
ู Java. ููุฏ ุฃุญุจ ุงูุฌู
ููุฑ ุงูุชูุฑูุฑ ูุซูุฑูุง ูุฏุฑุฌุฉ ุฃููุง ูู
ููุฑุฑ ูุดุฑ ู
ูุทุน ููุฏูู ูุญุณุจ ุ ุจู ุนู
ููุง ุฃูุถูุง ูุณุฎุฉ ูุตูุฉ ูุญุจุฑ:
ููุฏ ููุช ุฃูุชุจ Kotlin ูุฃูุซุฑ ู
ู ุซูุงุซ ุณููุงุช ุ ุงูุขู ููุท ุนูู ุฐูู ุ ูููู ูู ุงูุจุฏุงูุฉ ูู
ุช ุจุณุญุจ Kotlin ุฅูู ู
ุดุงุฑูุน Java ุงูุญุงููุฉ. ูุฐูู ุ ุทุฑุญ ุงูุณุคุงู "ููููุฉ ุฑุจุท Java ู Kotlin ู
ุนูุง" ูู ุทุฑููู ูุซูุฑูุง.
ูู ูุซูุฑ ู
ู ุงูุฃุญูุงู ุนูุฏู
ุง ุชุถูู Kotlin ุฅูู ู
ุดุฑูุน ุ ูู
ููู ุฃู ุชุฑู ููู ...
compile 'rxbinding:xyx' compile 'rxbinding-appcompat-v7:xyx' compile 'rxbinding-design:xyx' compile 'autodispose:xyz' compile 'autodispose-android:xyz' compile 'autodispose-android-archcomponents:xyz'
... ูุชุญูู ุฅูู ูุฐุง:
compile 'rxbinding:xyx' compile 'rxbinding-kotlin:xyx' compile 'rxbinding-appcompat-v7:xyx' compile 'rxbinding-appcompat-v7-kotlin:xyx' compile 'rxbinding-design:xyx' compile 'rxbinding-design-kotlin:xyx' compile 'autodispose:xyz' compile 'autodispose-kotlin:xyz' compile 'autodispose-android:xyz' compile 'autodispose-android-kotlin:xyz' compile 'autodispose-android-archcomponents:xyz' compile 'autodispose-android-archcomponents-kotlin:xyz'
ุชูุงุตูู ุงูุนุงู
ูู ุงูู
ุงุถููู: ุชูุชุณุจ ุงูู
ูุชุจุงุช ุงูุฃูุซุฑ ุดุนุจูุฉ ุฃุบููุฉ ุจุญูุซ ูู
ูู ุงุณุชุฎุฏุงู
ูุง ู
ู Kotlin ุจุดูู ุงุตุทูุงุญู.
ุฅุฐุง ูุชุจุช ูู Kotlin ุ ูุฃูุช ุชุนูู
ุฃู ููุงู ูุธุงุฆู ู
ูุญู ุฑุงุฆุนุฉ ุ ููุธุงุฆู ู
ุถู
ูุฉ ุ ูุชุนุจูุฑุงุช lambda ู
ุชููุฑุฉ ู
ู Java 6. ููุฐุง ุฑุงุฆุน ุ ูุฌุฐุจูุง ุฅูู Kotlin ุ ูููู ุงูุณุคุงู ุงูุฐู ูุทุฑุญ ููุณู. ุชุนุฏ ุฅู
ูุงููุฉ ุงูุชุดุบูู ุงูุชูุงุนูู ู
ุน Java ูุงุญุฏุฉ ู
ู ุฃูุจุฑ ู
ูุฒุงุช ุงููุบุฉ ูุฃูุซุฑูุง ุดููุนูุง. ุฅุฐุง ููุช ุชุฃุฎุฐ ูู ุงูุงุนุชุจุงุฑ ุฌู
ูุน ุงูู
ูุฒุงุช ุงูู
ุฏุฑุฌุฉ ุ ููู
ุงุฐุง ูุง ุชูุชุจ ู
ูุชุจุงุช ููุท ูู Kotlinุ ุณูุนู
ููู ุฌู
ูุนูุง ุจุดูู ู
ุซุงูู ุฎุงุฑุฌ ุงูุตูุฏูู ู
ุน Java ุ ููู ุชุญุชุงุฌ ุฅูู ุฏุนู
ูู ูุฐู ุงูุฃุบููุฉ ุ ุณูููู ุงูุฌู
ูุน ุณุนุฏุงุก ูู
ุญุชูู.
ูููู ุ ุจุงูุทุจุน ุ ู
ู ุงููุงุญูุฉ ุงูุนู
ููุฉ ุ ููุณ ูู ุดูุก ูุฑุฏููุง ูู
ุง ูู ุงูุญุงู ูู ุงููุชูุจุงุช ุ ููุงู ุฏุงุฆู
ูุง "ุณู
ุฉ ุฎุท ุตุบูุฑ" ุ ูููุงู ุญูุงู ุญุงุฏุฉ ุนูุฏ ุชูุงุทุน Kotlin ู Java ุ ูุงูููู
ุณูุชุญุฏุซ ุนู ูุฐุง ููููุงู.
ุญูุงู ุญุงุฏุฉ
ููุจุฏุฃ ุจุงูุงุฎุชูุงูุงุช. ุนูู ุณุจูู ุงูู
ุซุงู ุ ูู ุชุนูู
ุฃูู ูู Kotlin ูุง ุชูุฌุฏ ููู
ุงุช ุฑุฆูุณูุฉ ู
ุชููุจุฉ ุ ู
ุชุฒุงู
ูุฉ ุ ุตุงุฑู
ุฉ ุ ุนุงุจุฑุฉุ ูุชู
ุงุณุชุจุฏุงููุง ุจุชุนูููุงุช ู
ู ููุณ ุงูุงุณู
ู
ูุฌูุฏุฉ ูู ุญุฒู
ุฉ kotlin.jvm. ูุฐุง ุ ูุฅู ู
ุนุธู
ุงูุญุฏูุซ ูุฏูุฑ ุญูู ู
ุญุชููุงุช ูุฐู ุงูุญุฒู
ุฉ.
ููุงู
ุงูุฃุฎุดุงุจ - ู
ุซู ุชุฌุฑูุฏ ุงูู
ูุชุจุฉ ุนูู ูุทุน ุงูุฃุดุฌุงุฑ ู
ู
ุฒููุง ูุงุฑุชุงููู ุณูุฆ ุงูุณู
ุนุฉ. ูุณู
ุญ ูู ุจุงุณุชุฎุฏุงู
ู ูู ูู ู
ูุงู ูู ุชุทุจููู ุ ููุชุญูู ูู ุดูุก ุชุฑูุฏ ุฅุฑุณุงู ุงูุณุฌูุงุช ููู (ุฅูู logcat ุ ุฃู ุฅูู ุฎุงุฏู
ู ููุชุญููู ุ ุฃู ุงูุฅุจูุงุบ ุนู ุงูุฃุนุทุงู ุ ูู
ุง ุฅูู ุฐูู) ุฅูู ู
ูููุงุช ุฅุถุงููุฉ.
ุฏุนููุง ูุชุฎูู ุนูู ุณุจูู ุงูู
ุซุงู ุฃููุง ูุฑูุฏ ูุชุงุจุฉ ู
ูุชุจุฉ ู
ู
ุงุซูุฉ ุ ููุท ููุชุญูููุงุช. ูู ุงูุงุฑุชุจุงุท ุฃูุถูุง.
object Analytics { fun send(event: Event) {} fun addPlugins(plugs: List<Plugin>) {} fun getPlugins(): List<Plugin> {} } interface Plugin { fun init() fun send(event: Event) fun close() } data class Event( val name: String, val context: Map<String, Any> = emptyMap() )
ูุฃุฎุฐ ููุณ ูู
ุท ุงูุจูุงุก ุ ูุฏููุง ููุทุฉ ุฏุฎูู ูุงุญุฏุฉ - ูุฐุง ูู Analytics. ูู
ูููุง ุฅุฑุณุงู ุงูุฃุญุฏุงุซ ููุงู ูุฅุถุงูุฉ ุงูุฅุถุงูุงุช ูู
ุนุฑูุฉ ู
ุง ุฃุถููุงู ุจุงููุนู ููุงู.
ุงูุจุฑูุงู
ุฌ ุงูู
ุณุงุนุฏ ูู ูุงุฌูุฉ ุงูุจุฑูุงู
ุฌ ุงูู
ุณุงุนุฏ ุงูุฐู ููุฎุต API ุชุญูููู ู
ุนูู.
ููู ุงููุงูุน ุ ุชุญุชูู ูุฆุฉ ุงูุฃุญุฏุงุซ ุนูู ุงูู
ูุชุงุญ ูุณู
ุงุชูุง ุงูุชู ูุฑุณููุง. ูุง ูุชุนูู ุงูุชูุฑูุฑ ููุง ุจู
ุง ุฅุฐุง ูุงู ุงูุฃู
ุฑ ูุณุชุญู ุงุณุชุฎุฏุงู
ุงูุฃุบุงูู ุงููุฑุฏูุฉ ุ ูุฐูู ุฏุนููุง ูุง ูููุฏ holivar ุ ููููุง ุณูุดุงูุฏ ููููุฉ ุชู
ุดูุท ูุฐุง ุงูุดูุก ุจุฃูู
ูู.
ุงูุขู ุงูุบูุต ููููุง. ููู
ุง ููู ู
ุซุงู ุนูู ุงุณุชุฎุฏุงู
ู
ูุชุจุชูุง ูู Kotlin:
private fun useAnalytics() { Analytics.send(Event("only_name_event")) val props = mapOf( USER_ID to 1235, "my_custom_attr" to true ) Analytics.send(Event("custom_event", props)) val hasPlugins = Analytics.hasPlugins Analytics.addPlugin(EMPTY_PLUGIN)
ู
ู ุญูุซ ุงูู
ุจุฏุฃ ุ ูุจุฏู ูู
ุง ูู ู
ุชููุน. ููุทุฉ ุฏุฎูู ูุงุญุฏุฉ ุ ูุชุณู
ู ุงูุฃุณุงููุจ ูุง statics. ุญุฏุซ ุจุฏูู ู
ุนูู
ุงุช ุ ุญุฏุซ ุฐู ุณู
ุงุช. ูุชุญูู ูู
ุนุฑูุฉ ู
ุง ุฅุฐุง ูุงู ูุฏููุง ู
ูููุงุช ุฅุถุงููุฉ ุ ูุฏูุน ู
ูููููุง ุฅุถุงูููุง ูุงุฑุบูุง ู
ู ุฃุฌู ุชูููุฐ ููุน ู
ู "ุงูุชุดุบูู ุงูุฌุงู". ุฃู ุฃุถู ุจุนุถ ุงูู
ูููุงุช ุงูุฅุถุงููุฉ ุงูุฃุฎุฑู ูุงุนุฑุถูุง ูู
ุง ุฅูู ุฐูู. ุจุดูู ุนุงู
ุ ุญุงูุงุช ุงูู
ุณุชุฎุฏู
ูู ุงูููุงุณูุฉ ุ ุขู
ู ุฃู ูููู ูู ุดูุก ูุงุถุญูุง ุญุชู ุงูุขู.
ุงูุขู ุฏุนููุง ูุฑู ู
ุง ูุญุฏุซ ูู ุฌุงูุง ุนูุฏู
ุง ููุนู ุงูุดูุก ููุณู:
private static void useAnalytics() { Analytics.INSTANCE.send(new Event("only_name_event", Collections.emptyMap())); final Map<String, Object> props = new HashMap<>(); props.put(USER_ID, 1235); props.put("my_custom_attr", true); Analytics.INSTANCE.send(new Event("custom_event", props)); boolean hasPlugins = Analytics.INSTANCE.getHasPlugins(); Analytics.INSTANCE.addPlugin(Analytics.INSTANCE.getEMPTY_PLUGIN());
ุชูุฏูุน ุงูุถุฌุฉ ู
ุน INSTANCE ุนูู ุงูููุฑ ูู ุนููู ุ ููู ู
ู
ุชุฏุฉ ุ ููุฌูุฏ ููู
ุตุฑูุญุฉ ููู
ุนูู
ุฉ ุงูุงูุชุฑุงุถูุฉ ู
ุน ุงูุณู
ุงุช ุ ูุจุนุถ ุงูุญุฑูู ุจุฃุณู
ุงุก ุบุจูุฉ. ูุธุฑูุง ูุฃููุง ุจุดูู ุนุงู
ุ ุงุฌุชู
ุนูุง ููุง ูุชุญููู ูุฐุง ุฅูู ุดูุก ู
ุดุงุจู ููู
ูู ุงูุณุงุจู ู
ุน Kotlin ุ ููููุชูู ูู ูู ูุญุธุฉ ูุง ูุญุจูุง ููุญุงูู ุชูููููุง ุจุทุฑููุฉ ุฃู ุจุฃุฎุฑู.
ููุจุฏุฃ ุจุงูุญุฏุซ. ูููู
ุจุฅุฒุงูุฉ ุงูู
ุนูู
ุฉ Colletions.emptyMap () ู
ู ุงูุณุทุฑ ุงูุซุงูู ุ ููุธูุฑ ุฎุทุฃ ู
ุชุฑุฌู
. ู
ุง ุณุจุจ ุฐููุ
data class Event( val name: String, val context: Map<String, Any> = emptyMap() )
ูุญุชูู ู
ููุดุฆูุง ุนูู ู
ุนูู
ุฉ ุงูุชุฑุงุถูุฉ ูู
ุฑุฑ ุงูููู
ุฉ ุฅูููุง. ูุฃุชู ู
ู Java ุฅูู Kotlin ุ ูู
ู ุงูู
ูุทูู ุฃู ููุชุฑุถ ุฃู ูุฌูุฏ ู
ุนูู
ุฉ ุงูุชุฑุงุถูุฉ ูููุฏ ู
ูุดุฆูู: ูุงุญุฏ ู
ู
ุชูุฆ ุจู
ุนูู
ุชูู ุ ููุงุญุฏ ุฌุฒุฆู ุ ูู
ูู ุชุญุฏูุฏ ุงูุงุณู
ููุท. ู
ู ุงููุงุถุญ ุฃู ุงูู
ุชุฑุฌู
ูุง ูุนุชูุฏ ุฐูู. ุฏุนููุง ูุฑู ูู
ุงุฐุง ูุนุชูุฏ ุฃููุง ู
ุฎุทุฆูู.
ุฃุฏุงุชูุง ุงูุฑุฆูุณูุฉ ูุชุญููู ุฌู
ูุน ุงูุชููุจุงุช ูุงูุงูุนุทุงูุงุช ูููููุฉ ุชุญููู Kotlin ุฅูู JVM bytecode - Kotlin Bytecode Viewer. ูู Android Studio ู IntelliJ IDEA ุ ููุน ูู ูุงุฆู
ุฉ Tools - Kotlin - Show Kotlin Bytecode. ูู
ููู ุจุจุณุงุทุฉ ุงูุถุบุท ุนูู Cmd + Shift + A ููุชุงุจุฉ Kotlin Bytecode ูู ุดุฑูุท ุงูุจุญุซ.

ููุง ุ ุจุดูู ู
ุฏูุด ุ ูุฑู ุฑู
ุฒูุง ุซุงููููุง ูู
ุง ูุชุญูู ุฅููู ูุตู Kotlin. ูุง ุฃุชููุน ุฃู ูููู ูุฏูู ู
ุนุฑูุฉ ู
ู
ุชุงุฒุฉ ุจุงูุจุงูุช ููุฏ ุ ูุงูุฃูู
ู
ู ุฐูู ุ ูุง ูุชููุน ู
ุทูุฑู IDE ุฐูู ุฃูุถูุง. ูุฐูู ุ ุฌุนููุง ุฒุฑ Decompile.
ุจุนุฏ ุงูููุฑ ูููู ุ ูุฑู ุฑู
ุฒ Java ุฌูุฏูุง ุชูุฑูุจูุง:
public final class Event { @NotNull private final String name; @NotNull private final Map context; @NotNull public final String getName() { return this.name; } @NotNull public final Map getContext() { return this.context; } public Event(@NotNull String name, @NotNull Map context) { Intrinsics.checkParameterIsNotNull(name, "name"); Intrinsics.checkParameterIsNotNull(context, "context"); super(); this.name = name; this.context = context; }
ูุฑู ุญููููุง ุ getters ุ ุงูู
ูุดุฆ ุงูู
ุชููุน ู
ุน ู
ุนูู
ุชูู ูุณูุงู ุ ูู ุดูุก ูุญุฏุซ ุจุดูู ุฌูุฏ. ูููู
ุง ููู ูุฑู ุงูู
ููุดุฆ ุงูุซุงูู ุ ูููุง ู
ุน ุชูููุน ุบูุฑ ู
ุชููุน: ููุณ ุจู
ุนูู
ุฉ ูุงุญุฏุฉ ุ ูููู ูุณุจุจ ู
ุง ู
ุน ุฃุฑุจุนุฉ.
ููุง ูู
ููู ุฃู ุชุดุนุฑ ุจุงูุญุฑุฌ ุ ูููู ูู
ููู ุฃู ุชุชุณูู ุฃุนู
ู ููููุงู ูุชูุชุด. ุจุฏุงูุฉ ู
ู ุงูููู
ุ ุณูู ูููู
ุฃู DefaultConstructorMarker ูู ูุฆุฉ ุฎุงุตุฉ ู
ู ู
ูุชุจุฉ Kotlin ุงูููุงุณูุฉ ุ ุชู
ุช ุฅุถุงูุชูุง ููุง ุญุชู ูุง ูููู ููุงู ุชุนุงุฑุถ ู
ุน ุงูู
ูุดุฆูู ุงูู
ูุชูุจูู ุ ุญูุซ ูุง ูู
ูููุง ุชุนููู ู
ุนูู
ุฉ ููุน DefaultConstructorMarker ุจุฃูุฏููุง. ูุงูุดูุก ุงูู
ุซูุฑ ููุงูุชู
ุงู
ุญูู int var3 ูู ููุงุน ุงูุจุช ููููู
ุงูุงูุชุฑุงุถูุฉ ุงูุชู ูุฌุจ ุฃู ูุณุชุฎุฏู
ูุง. ูู ูุฐู ุงูุญุงูุฉ ุ ุฅุฐุง ูุงู ููุงุน ุงูุจุช ูุชุทุงุจู ู
ุน ุงูุงุซููู ุ ูุฅููุง ูุนูู
ุฃูู ูู
ูุชู
ุชุนููู var2 ุ ููู
ูุชู
ุชุนููู ุณู
ุงุชูุง ุ ููุณุชุฎุฏู
ุงูููู
ุฉ ุงูุงูุชุฑุงุถูุฉ.
ููู ูุตูุญ ุงููุถุนุ ููููุงู
ุจุฐูู ุ ููุงู ุชุนููู ุชูุถูุญู ุฎุงุฑูJvmOverloads ู
ู ุงูุญุฒู
ุฉ ุงูุชู ุชุญุฏุซุช ุนููุง ุจุงููุนู. ุนูููุง ุฃู ูุนูููุง ุนูู ุงูู
ูุดุฆ.
data class Event @JvmOverloads constructor( val name: String, val context: Map<String, Any> = emptyMap() )
ูู
ุงุฐุง ุณุชูุนูุ ุฏุนููุง ููุชูู ุฅูู ููุณ ุงูุฃุฏุงุฉ. ุงูุขู ูุฑู ู
ูุดุฆูุง ุงููุงู
ู ุ ูู
ูุดุฆ ู
ุน DefaultConstructorMarker ุ ู ุ ููุง ุ ู
ูุดุฆ ุจู
ุนูู
ุฉ ูุงุญุฏุฉ ุ ููู ู
ุชุงุญ ุงูุขู ู
ู Java:
@JvmOverloads public Event(@NotNull String name) { this.name, (Map)null, 2, (DefaultConstructorMarker)null); }
ููู
ุง ุชุฑูู ุ ูุฅูู ูููุถ ูู ุงูุนู
ู ู
ุน ุงูู
ุนูู
ุงุช ุงูุงูุชุฑุงุถูุฉ ุฅูู ู
ููุดุฆูุง ุจุงุณุชุฎุฏุงู
ุฃููุนุฉ ุงูุจุช. ูุจุงูุชุงูู ุ ูุญู ูุง ููุชุฌ ู
ุนููู
ุงุช ุญูู ุงูููู
ุฉ ุงูุงูุชุฑุงุถูุฉ ุงูุชู ูุญุชุงุฌ ุฅูู ูุถุนูุง ููุงู ุ ูุญู ููุท ูููุถ ูู ุดูุก ูู ู
ููุดุฆ ูุงุญุฏ. ุฌู
ูู ูุชุญูู ู
ู
ุง ูุญุตู ุนููู ู
ู ุฌุงูุจ ุฌุงูุง: ุงูู
ุชุฑุฌู
ุณุนูุฏ ูุบูุฑ ุบุงุถุจ.
ุฏุนููุง ูุฑู ู
ุง ูุง ูุญุจู ุจุนุฏ ุฐูู. ูุญู ูุง ูุญุจ ูุฐุง INSTANCE ุ ุงูุฐู ูุนุชุจุฑ ูุงุณููุง ุจุงูููู ุงูุฃุฑุฌูุงูู. ุฃูุง ูุง ุฃุญุจ ุงูููู ุงูุฃุฑุฌูุงูู :)

ุฏุนููุง ุชุญูู ุ ุจุณุจุจ ู
ุง ุงุชุถุญ. ุฏุนููุง ูููู ูุธุฑุฉ ุนูู ุงูุฑู
ุฒ ุงูุซุงููู ู
ุฑุฉ ุฃุฎุฑู.
ุนูู ุณุจูู ุงูู
ุซุงู ุ ูุณูุท ุงูุถูุก ุนูู ุฏุงูุฉ init ููุชุฃูุฏ ู
ู ุฃู init ุชููู ุจุงููุนู ุบูุฑ ุซุงุจุชุฉ.

ุฃู ุ ู
ูู
ุง ูููู ุงูู
ุฑุก ุ ูุญุชุงุฌ ุฅูู ุงูุนู
ู ู
ุน ู
ุซูู ู
ู ูุฐุง ุงููุตู ููุทูู ุนููู ูุฐู ุงูุฃุณุงููุจ. ูููู ูู
ูููุง ุฃู ูุฌุจุฑ ุฌูู ูู ูุฐู ุงูุฃุณุงููุจ ุนูู ุฃู ุชููู ุซุงุจุชุฉ. ููุงู ุชุนููู ุชูุถูุญู ุฑุงุฆุนJvmStatic ููุฐุง ุงูุบุฑุถ. ุฏุนูุง ูุถููู ุฅูู ุงูุชููุฆุฉ ูุฅุฑุณุงู ุงููุธุงุฆู ูุงูุชุญูู ู
ู
ุง ูููุฑ ููู ุงูู
ุชุฑุฌู
ุงูุขู.
ูุฑู ุฃูู ุชู
ุช ุฅุถุงูุฉ ุงูููู
ุฉ ุงูุฑุฆูุณูุฉ ุงูุซุงุจุชุฉ ุฅูู ุงูุญุฑู ุงูุชููุฆุฉ ุงูููุงุฆูุฉ ุงูุนุงู
ุฉ () ุ ูุฃููุฐูุง ุฃููุณูุง ู
ู ุงูุนู
ู ู
ุน INSTANCE. ุณูู ูุชุญูู ู
ู ุฐูู ูู ููุฏ Java.
ูุฎุจุฑูุง ุงูู
ุชุฑุฌู
ุงูุขู ุฃููุง ูุณุชุฏุนู ุงูุทุฑููุฉ ุงูุซุงุจุชุฉ ู
ู ุณูุงู INSTANCE. ูู
ูู ุชุตุญูุญ ูุฐุง: ุงุถุบุท ุนูู Alt + Enter ุ ูุญุฏุฏ "Cleanup Code" ุ ูููููุง ุ ูุฎุชูู INSTANCE ุ ูู ุดูุก ูุจุฏู ูู
ุง ูุงู ูู Kotlin:
Analytics.send(new Event("only_name_event"));
ุงูุขู ูุฏููุง ู
ุฎุทุท ููุนู
ู ู
ุน ุงูุฃุณุงููุจ ุงูุซุงุจุชุฉ. ุฃุถู ูุฐุง ุงูุชุนููู ุงูุชูุถูุญู ุฃููู
ุง ููู
ูุง:

ูุงูุชุนููู: ุฅุฐุง ูุงูุช ุงูุฃุณุงููุจ ุงูุชู ูุฏููุง ูู ุจุงูุทุจุน ุทุฑู ุงูู
ุซูู ุ ูุนูุฏุฆุฐ ุนูู ุณุจูู ุงูู
ุซุงู ุ ู
ุน ุงูุฎุตุงุฆุต ุ ููุณ ูู ุดูุก ูุงุถุญูุง ุฌุฏูุง. ูุชู
ุฅูุดุงุก ุงูุญููู ููุณูุง (ู
ุซู ุงูู
ูููุงุช ุงูุฅุถุงููุฉ) ุนูู ุฃููุง ุซุงุจุชุฉ. ูููู ูุนู
ู ุงูู
ุณุชูุทููู ูุงูู
ุณุชูุทููู ูุทุฑู ุงูู
ุซุงู. ูุฐูู ุ ุจุงููุณุจุฉ ููู
ู
ุชููุงุช ุ ุชุญุชุงุฌ ุฃูุถูุง ุฅูู ุฅุถุงูุฉ ูุฐุง ุงูุชุนููู ุงูุชูุถูุญู ูุฌุนู ุงูู
ุณุชูุทููู ูุงูุฑุณูู
ุงุช ุซุงุจุชุฉ. ุนูู ุณุจูู ุงูู
ุซุงู ุ ูุฑู ุงูู
ุชุบูุฑ isInited ุ ุฃุถู ุงูุชุนููู ุงูุชูุถูุญูJvmStatic ุฅููู ุ ูุงูุขู ูุฑู ูู ุนุงุฑุถ Kotlin Bytecode ุฃู ุทุฑููุฉ isInited () ุฃุตุจุญุช ุซุงุจุชุฉ ุ ูู ุดูุก ุนูู ู
ุง ูุฑุงู
.
ุงูุขู ุฏุนูุง ููุชูู ุฅูู ููุฏ Java ุ "ููุชูุธูู" ุ ููู ุดูุก ูุจุฏู ู
ุซู Kotlin ุ ุจุงุณุชุซูุงุก ุงููุงุตูุฉ ุงูู
ูููุทุฉ ูููู
ุฉ ุฌุฏูุฏุฉ - ุญุณููุง ุ ูู ุชุชุฎูุต ู
ููุง.
public static void useAnalytics() { Analytics.send(new Event("only_name_event")); final Map<String, Object> props = new HashMap<>(); props.put(USER_ID, 1235); props.put("my_custom_attr", true); Analytics.send(new Event("custom_event", props)); boolean hasPlugins = Analytics.getHasPlugins(); Analytics.addPlugin(Analytics.INSTANCE.getEMPTY_PLUGIN());
ุงูุฎุทูุฉ ุงูุชุงููุฉ: ูุฑู ูุฐุง getHasPlugins getter ู
ุน ุงูุจุงุฏุฆุงุช ูู ููุช ูุงุญุฏ. ุจุงูุทุจุน ุ ูุณุช ุฎุจูุฑูุง ูุจูุฑูุง ูู ุงููุบุฉ ุงูุฅูุฌููุฒูุฉ ุ ูููู ูุจุฏู ูู ุฃู ููุงู ุดูุฆูุง ุขุฎุฑ ุถู
ูููุง ููุง. ูู
ุงุฐุง ูุญุฏุซ ูุฐุงุ
ูู
ุง ุนุฑููุง ุนู ูุซุจ ู
ุน Kotlin ุ ุจุงููุณุจุฉ ูุฃุณู
ุงุก ุงูุนูุงุฑุงุช ุงูุฎุงุตุฉ ุจุงูุฑุณุงูุฉ ูุงูู
ุณุชูุทููู ูุชู
ุฅูุดุงุคูุง ููููุง ูููุงุนุฏ JavaBeans. ูุฐุง ูุนูู ุฃู ุงูุญุฑูู ุณุชููู ุจุดูู ุนุงู
ู
ุน ุจุงุฏุฆุงุช ุงูุญุตูู ุ ูุงูุจุณุท ู
ุน ุจุงุฏุฆุงุช ู
ุญุฏุฏุฉ. ูููู ููุงู ุงุณุชุซูุงุก ูุงุญุฏ: ุฅุฐุง ูุงู ูุฏูู ุญูู ู
ูุทูู ูุงุณู
ู ูุญุชูู ุนูู ุงูุจุงุฏุฆุฉ ุ ูุณูุชู
ุงูุจุฏุก ุจู getter. ูู
ูู ุฑุคูุฉ ุฐูู ูู ู
ุซุงู ุญูู isInited ุฃุนูุงู.
ูุณูุก ุงูุญุธ ุ ูุฌุจ ุฃู ูุชู
ุงุณุชุฏุนุงุก ุงูุญููู ุงูู
ูุทููุฉ ุจุนูุฏูุง ุฏุงุฆู
ูุง. ูุง ูุฑุถู isPlugins ุชู
ุงู
ูุง ู
ุง ูุฑูุฏ ุฃู ูุธูุฑู ุฏูุงูุฉ ุจุงูุงุณู
. ููู ููููุ
ููุฐุง ููุณ ุตุนุจูุง ุจุงููุณุจุฉ ููุง ุ ูุฃู ูุฐุง ูู ุงูุชุนููู ุงูุชูุถูุญู ุงูุฎุงุต ุจูุง (ูู
ุง ููู
ุช ุจุงููุนู ุ ุณุฃูุฑุฑ ูุฐุง ูุซูุฑูุง ุงูููู
). ูุณู
ุญ ูู ุงูุชุนููู ุงูุชูุถูุญูJvmName ุจุชุญุฏูุฏ ุฃู ุงุณู
ูุฑูุฏู (ู
ุฏุนูู
ุจุดูู ุทุจูุนู ุจูุงุณุทุฉ Java). ุฃุถูู:
@JvmStatic val hasPlugins @JvmName("hasPlugin") get() = plugins.isNotEmpty()
ุฏุนููุง ูุชุญูู ู
ู
ุง ุญุตููุง ุนููู ูู Java: ูู
ุชุนุฏ ุทุฑููุฉ getHasPlugins ู
ูุฌูุฏุฉ ุ ูููู hasPlugins ูู ุดูุก ุจุญุฏ ุฐุงุชู. ูุฐุง ุญู ู
ุดููุชูุง ุ ู
ุฑุฉ ุฃุฎุฑู ุ ู
ุน ุชุนููู ุชูุถูุญู ูุงุญุฏ. ุงูุขู ูุญู ุฌู
ูุน ุงูุชุนูููุงุช ุงูุชูุถูุญูุฉ!
ูู
ุง ุชุฑู ุ ููุง ูุถุน ุงูุชุนููู ุงูุชูุถูุญู ู
ุจุงุดุฑุฉ ุนูู ุงูููู
. ู
ุง ุณุจุจ ุฐููุ ู
ุน ุญูููุฉ ุฃูู ุชุญุช ุงูู
ูููุฉ ูู ุงููุซูุฑ ู
ู ูู ุดูุก ุ ูููุณ ู
ู ุงููุงุถุญ ู
ุง ููุทุจูJvmName. ุฅุฐุง ูู
ุช ุจููู ุงูุชุนููู ุงูุชูุถูุญู ุฅูู val hasPlugins ููุณูุง ุ ูุฅู ุงูู
ุชุฑุฌู
ูู ูููู
ู
ุง ูุฌุจ ุชุทุจููู ุนููู.
ูู
ุน ุฐูู ุ ูุฅู Kotlin ูุฏูู ุฃูุถูุง ุงููุฏุฑุฉ ุนูู ุชุญุฏูุฏ ู
ูุงู ุงุณุชุฎุฏุงู
ุงูุชุนูููุงุช ุงูุชูุถูุญูุฉ ู
ุจุงุดุฑุฉู. ูู
ููู ุชุญุฏูุฏ getter ุงููุฏู ุ ุงูู
ูู ุจุฃูู
ูู ุ ุงูู
ุนูู
ุฉ ุ ุงูู
ููุถ ุ ุงูุญูู ุ ุงูุฎุตุงุฆุต ุ ูุธุงุฆู ู
ูุญู ุงูู
ุณุชูุจู ุ ุงูู
ุนูู
ุฉ setter ู setter. ูู ุญุงูุชูุง ุ ุงูุจุงูุบุฉ ูู ู
ุซูุฑุฉ ููุงูุชู
ุงู
. ูุฅุฐุง ูุนูุช ุฐูู ุ ูุณูููู ูู ููุณ ุงูุชุฃุซูุฑ ุนูุฏู
ุง ูู
ูุง ุจุชุนููู ุงูุชุนููู ุงูุชูุถูุญู ุนูู ุงูุญุตูู ุนูู:
@get:JvmName("hasPlugins") @JvmStatic val hasPlugins get() = plugins.isNotEmpty()
ููููุง ูุฐูู ุ ุฅุฐุง ูู
ููู ูุฏูู ู
ูุฏุฑุจ ู
ูุฎุตุต ุ ููู
ููู ุฅุฑูุงูู ู
ุจุงุดุฑุฉ ุจู
ู
ุชููุงุชู ุ ูุณูููู ูู ุดูุก ุนูู ู
ุง ูุฑุงู
.
ุงูููุทุฉ ุงูุชุงููุฉ ุงูุชู ุชุฑุจููุง ููููุงู ูู "Analytics.INSTANCE.getEMPTY_PLUGIN ()". ูู
ูุนุฏ ุงูุฃู
ุฑ ููุง ุญุชู ุจุงููุบุฉ ุงูุฅูุฌููุฒูุฉ ุ ูููู ุจุจุณุงุทุฉ: ูู
ุงุฐุงุ ุงูุฌูุงุจ ูู ููุณู ุ ูููู ุฃููุงู ู
ูุฏู
ุฉ ุตุบูุฑุฉ.
ู
ู ุฃุฌู ุฌุนู ุงูุญูู ุซุงุจุชูุง ุ ูุฏูู ุทุฑููุชุงู. ุฅุฐุง ูู
ุช ุจุชุนุฑูู ุซุงุจุช ูููุน ุจุฏุงุฆู ุฃู ูุณูุณูุฉ ุ ูุฏุงุฎู ุงููุงุฆู ุฃูุถูุง ุ ููู
ููู ุงุณุชุฎุฏุงู
ุงูููู
ุฉ ุงูุฃุณุงุณูุฉ const ุ ุซู
ูู ูุชู
ุฅูุดุงุก ุนูุงู
ู ุถุจุท getter ูุฃุดูุงุก ุฃุฎุฑู. ุณูููู ุซุงุจุชูุง ุนุงุฏููุง - ุซุงุจุชูุง ููุงุฆููุง ุฎุงุตูุง - ูุณูุชู
ุชุญุฏูุฏู ุ ุฃู ุดูุก ุฌุงูุง ุนุงุฏู ุชู
ุงู
ูุง.
ูููู ุฅุฐุง ููุช ุชุฑูุฏ ุนู
ู ุซุงุจุช ู
ู ูุงุฆู ู
ุฎุชูู ุนู ุงูุณูุณูุฉ ุ ููู ุชุชู
ูู ู
ู ุงุณุชุฎุฏุงู
ููู
ุฉ const ููุฐุง ุงูุบุฑุถ. ููุง ูุฏููุง ูุงู EMPTY_PLUGIN = EmptyPlugin () ุ ููููุง ููุง ุ ู
ู ุงููุงุถุญ ุฃู ูุฐุง ุงูู
ููุน ุงูุฑููุจ ูุฏ ุชู
ุฅูุดุงุคู. ูู
ูููุง ุฅุนุงุฏุฉ ุชุณู
ูุฉJvmName ู
ุน ุชุนููู ุชูุถูุญู ุ ูุฅุฒุงูุฉ ูุฐู ุงูุจุงุฏุฆุฉ ุ ูููู ูุง ุชุฒุงู ุทุฑููุฉ - ู
ุน ุฃููุงุณ. ูุฐุง ุ ูู ุชุนู
ู ุงูุญููู ุงููุฏูู
ุฉ ุ ูุญู ูุจุญุซ ุนู ุญููู ุฌุฏูุฏุฉ.
ูููุง ููุฐุง ุงูุชุนููู ุงูุชูุถูุญู @ JvmField ุ ุงูุฐู ูููู: "ุฃูุง ูุง ุฃุฑูุฏ ุฑุณุงุฆู ููุง ุ ููุง ุฃุฑูุฏ ู
ุณุชูุทููู ุ ุงุฌุนูููู ุญููุงู." ุถุนู ุฃู
ุงู
ูุงู EMPTY_PLUGIN ูุชุญูู ู
ู ุตุญุฉ ูู ุดูุก.

ูุนุฑุถ ุนุงุฑุถ Kotlin Bytecode ุงููุทุนุฉ ุงูู
ู
ูุฒุฉ ุงูุชู ุชูู ุนูููุง ุญุงูููุง ูู ุงูู
ูู. ูุญู ุงูุขู ููู ุนูู EMPTY_PLUGIN ุ ูุชุฑู ููุง ุฃูู ุชุชู
ูุชุงุจุฉ ููุน ู
ู ุงูุชููุฆุฉ ูู ุงูู
ูุดุฆ. ูุงูุญูููุฉ ูู ุฃู ุงูุจุงูุบุฉ ูู
ุชุนุฏ ู
ูุฌูุฏุฉ ูุงููุตูู ุฅูููุง ููุชุณุฌูู ููุท. ูุฅุฐุง ููุฑุช ุนูู ูู ุงูุชุญููู ุ ูุณูุฑู ุธููุฑ "EmptyPlugin EMPTY_PLUGIN" ุงูููุงุฆู ุงูุซุงุจุช ุงูุนุงู
ุ ููุฐุง ุจุงูุถุจุท ู
ุง ุญูููุงู. ุฌู
ูู ูุชุญูู ู
ู ุฃู ูู ุดูุก ูุฑุถู ุงูุฌู
ูุน ุ ููุง ุณูู
ุง ุงูู
ุชุฑุฌู
. ุฃูู
ุดูุก ุชุญุชุงุฌ ุฅูู ุงุณุชุฑุถุงุฆู ูู ุงูู
ุชุฑุฌู
.
ุงููุฑุงุซุฉ
ููุฃุฎุฐ ุงุณุชุฑุงุญุฉ ู
ู ุงูููุฏ ููููู ูุธุฑุฉ ุนูู ุงูุฃุฏููุฉ ุงูุฌููุณุฉ. ูุฐุง ู
ูุถูุน ุณุงุฎู ุฌุฏุง. ุฃู ุฒูู ุ ุงูุฐู ูู
ูุนุฏ ูุญุจ ุฐูู. ุฌุงูุง ููุง ุชุนููุฏุงุชูุง ุงูุฎุงุตุฉ ุ ููู Kotlin ู
ุฎุชููุฉ. ุจุงุฏุฆ ุฐู ุจุฏุก ุ ูุญู ููููู ุจุดุฃู ุงูุงุฎุชูุงู. ู
ุง ูุฐุง
ุงูุชุจุงูู ูู ุทุฑููุฉ ูููู ุงูู
ุนููู
ุงุช ุญูู ูุฑู
ูุฉ ุงูููุน ู
ู ุงูุฃููุงุน ุงูุฃุณุงุณูุฉ ุฅูู ุงูู
ุดุชูุงุช ุ ุนูู ุณุจูู ุงูู
ุซุงู ุ ุฅูู ุงูุญุงููุงุช ุฃู ุฅูู ุงูุฃุฏููุฉ ุงูุฌููุณุฉ. ููุง ูุฏููุง ูุฆุชู ุงูุญููุงูุงุช ูุงูููุจ ู
ุน ุงุชุตุงู ูุงุถุญ ููุบุงูุฉ: ุงูููุจ ูู ููุน ูุฑุนู ุ ูุงูุญููุงู ูู ููุน ูุฑุนู ุ ูุงูุณูู
ูุฃุชู ู
ู ุงูููุน ุงููุฑุนู.

ูู
ุง ุงูุนูุงูุฉ ุงูุชู ุณุชููู ููุง ู
ุดุชูุงุชูุงุ ุฏุนููุง ูููู ูุธุฑุฉ ุนูู ุจุนุถ ุงูุญุงูุงุช.
ุงูุฃูู ูู ุงูู
ูุฑุฑ. ูุชุญุฏูุฏ ู
ุง ูู ููุน ูุฑุนู ูู
ุง ูู ููุน ูุฑุนู ุ ุณูุณุชุฑุดุฏ ุจูุงุนุฏุฉ ุงูุงุณุชุจุฏุงู Barbara Liskov. ูู
ูู ุตูุงุบุชู ุนูู ุงููุญู ุงูุชุงูู: "ูุง ูุฌุจ ุฃู ูุชุทูุจ ุงูููุน ุงููุฑุนู ุฃูุซุฑ ู
ู ุฐูู ุ ููุง ููุฏู
ุฃูู ู
ู ุฐูู."
ูู ุญุงูุชูุง ุ ุงูุดูุก ุงููุญูุฏ ุงูุฐู ููุนูู Iterator ูู ุฅุนุทุงุฆูุง ุฃุดูุงุก ู
ูุชูุจุฉ ุ ุนูู ุณุจูู ุงูู
ุซุงู ุ Animal. ุฅุฐุง ูุจููุง Iterator ูู ู
ูุงู ู
ุง ุ ููู
ูููุง ูุถุน Iterator ููุงู ุ ูุงูุญุตูู ุนูู Animal ู
ู ุงูุทุฑููุฉ ุงูุชุงููุฉ () ุ ูุฃู ุงูููุจ ูู ุฃูุถูุง Animal. ูุญู ููุฏู
ููุณ ุฃูู ุ ูููู ุฃูุซุฑ ุ ูุฃู ุงูููุจ ูู ููุน ูุฑุนู.

ุฃูุฑุฑ: ูุญู ููุฑุฃ ููุท ู
ู ูุฐุง ุงูููุน ุ ูุฐูู ูุชู
ุงูุญูุงุธ ุนูู ุงูุนูุงูุฉ ุจูู ุงูููุน ูุงูููุน ุงููุฑุนู ููุง. ูุชุณู
ู ูุฐู ุงูุฃููุงุน ุงูู
ุชุบูุฑ ุงูู
ุดุชุฑู.
ุญุงูุฉ ุฃุฎุฑู: ุงูุนู
ู. ุงูุนู
ู ูู ูุธููุฉ ูุง ุชุฑุฌุน ุดูุฆูุง ุ ููุง ุชุฃุฎุฐ ู
ุนูู
ุฉ ูุงุญุฏุฉ ุ ูููุชุจ ููุท ุฅูู Action ุ ุฃู ุฃููุง ุชุฃุฎุฐ ููุจูุง ุฃู ุญููุงููุง ู
ูุง.

ูููุฐุง ุ ูู
ูุนุฏ ููุง ููุฏู
ุ ูููู ุงูุทูุจ ุ ููุฌุจ ุฃูุง ูุทูุจ ุงูู
ุฒูุฏ. ูุฐุง ูุนูู ุฃู ุงุนุชู
ุงุฏูุง ูุชุบูุฑ. "ูุง ุฃูุซุฑ" ูุฏููุง ุญููุงู (ุญููุงู ุฃูู ู
ู ููุจ). ูุชุณู
ู ูุฐู ุงูุฃููุงุน ุงูู
ุชูุงูุถุฉ.
ููุงู ุญุงูุฉ ุซุงูุซุฉ - ุนูู ุณุจูู ุงูู
ุซุงู ุ ArrayList ุ ุงูุชู ููุฑุฃ ูููุชุจ ู
ููุง. ูุฐูู ุ ูู ูุฐู ุงูุญุงูุฉ ุ ููุชูู ุฅุญุฏู ุงูููุงุนุฏ ุ ูุทูุจ ุงูู
ุฒูุฏ ููุชุณุฌูู (ููุจ ุ ูููุณ ุญููุงู). ูุง ุชุฑุชุจุท ูุฐู ุงูุฃููุงุน ุจุฃู ุดูู ู
ู ุงูุฃุดูุงู ุ ููุทูู ุนูููุง ุซุงุจุชุฉ.

ูุฐูู ุ ูู Java ุ ุนูุฏู
ุง ุชู
ุชุตู
ูู
ู ูุจู ุงูุฅุตุฏุงุฑ 1.5 (ุญูุซ ุธูุฑุช ุงูุฃุฏููุฉ ุงูุจุฏููุฉ) ุ ูุงู
ูุง ุงูุชุฑุงุถููุง ุจุนู
ู ู
ุตูููุงุช ู
ุดุชุฑูุฉ. ูุฐุง ูุนูู ุฃูู ูู
ููู ุชุนููู ู
ุตูููุฉ ู
ู ุงูุณูุงุณู ุฅูู ู
ุตูููุฉ ุงููุงุฆูุงุช ุ ุซู
ุชู
ุฑูุฑูุง ูู ู
ูุงู ู
ุง ุฅูู ุงูุทุฑููุฉ ุงูุชู ุชุชุทูุจ ุตููู ุงููุงุฆูุงุช ุ ูู
ุญุงููุฉ ุฏูุน ุงููุงุฆู ููุงู ุ ุนูู ุงูุฑุบู
ู
ู ุฃู ูุฐู ู
ุตูููุฉ ู
ู ุงูุณูุงุณู. ูู ุดูุก ุณูู ููุน ุนููู.
ุจุนุฏ ุฃู ุชุนูู
ูุง ู
ู ุงูุชุฌุฑุจุฉ ุงูู
ุฑูุฑุฉ ุฃูู ูุง ูู
ูู ุงูููุงู
ุจุฐูู ุ ุนูุฏ ุชุตู
ูู
ุงูุฃุฏููุฉ ุงูุฌููุณุฉ ุ ูุฑุฑูุง "ุณูุฌุนู ุงูู
ุฌู
ูุนุงุช ุซุงุจุชุฉ ุ ููู ููุนู ุฃู ุดูุก ู
ุนูู
".
ููู ุงูููุงูุฉ ุงุชุถุญ ุฃูู ูู ู
ุซู ูุฐุง ุงูุดูุก ุงููุงุถุญ ุนูู ู
ุง ูุจุฏู ูุฌุจ ุฃู ูููู ูู ุดูุก ุนูู ู
ุง ูุฑุงู
ุ ูููู ูู ุงููุงูุน ููุณ ุนูู ู
ุง ูุฑุงู
:
ููููุง ุจุญุงุฌุฉ ุฅูู ุชุญุฏูุฏ ู
ุง ูู
ูููุง ุ ุจุทุฑููุฉ ู
ุง ุ ู
ุง ูู
ูููุง ูุนูู: ุฅุฐุง ููุง ููุฑุฃ ููุท ู
ู ูุฐู ุงููุฑูุฉ ุ ููู
ุงุฐุง ูุง ูุชู
ูู ู
ู ููู ูุงุฆู
ุฉ ุงูููุงุจ ููุงุ ูุฐูู ุ ู
ู ุงูู
ู
ูู ุฃู ูู
ูุฒ ุจุงุณุชุฎุฏุงู
ุญุฑู ุงูุจุฏู ููุน ุงูุงุฎุชูุงู ุงูุฐู ุณูุญุชูู ุนููู ูุฐุง ุงูููุน:
List<Dog> dogs = new ArrayList<>(); List<? extends Animal> animals = dogs;
ูู
ุง ุชุฑู ุ ูุดุงุฑ ุฅูู ูุฐุง ุงูุงุฎุชูุงู ูู ู
ูุงู ุงูุงุณุชุฎุฏุงู
ุ ุญูุซ ูุนูู ุงูููุงุจ. ูุฐูู ุ ูุณู
ู ูุฐุง ุงุฎุชูุงู ู
ููุน ุงูุงุณุชุฎุฏุงู
.
ู
ุง ูู ุณูุจูุงุช ูุฐุงุ ุงูุฌุงูุจ ุงูุณูุจู ูู ุฃูู ูุฌุจ ุนููู ุชุญุฏูุฏ ุญุฑู ุงูุจุฏู ุงูู
ุฎูู ูุฐุง ุฃููู
ุง ุชุณุชุฎุฏู
API ุงูุฎุงุต ุจู ุ ููู ูุฐุง ู
ุซู
ุฑ ููุบุงูุฉ ูู ุงูุชุนููู
ุงุช ุงูุจุฑู
ุฌูุฉ. ูููู ูู Kotlin ูุณุจุจ ู
ุง ุ ูุนู
ู ู
ุซู ูุฐุง ุงูุดูุก ุฎุงุฑุฌ ุงูุตูุฏูู ุ ููุง ุชุญุชุงุฌ ุฅูู ุชุญุฏูุฏ ุฃู ุดูุก:
val dogs: List<Dog> = ArrayList() val animals: List<Animal> = dogs
ู
ุง ุณุจุจ ุฐููุ ู
ุน ุญูููุฉ ุฃู ุงูุฃูุฑุงู ู
ุฎุชููุฉ ูู ุงููุงูุน. ุชุนูู ุงููุงุฆู
ุฉ ูู Java ุงููุชุงุจุฉ ุ ุจููู
ุง ูู Kotlin ุชููู ูููุฑุงุกุฉ ููุท ุ ูููุณ ุถู
ูููุง. ูุฐูู ุ ู
ู ุญูุซ ุงูู
ุจุฏุฃ ุ ูู
ูููุง ุฃู ูููู ุนูู ุงูููุฑ ุฃููุง ููุฑุฃ ููุท ู
ู ููุง ุ ูุจุงูุชุงูู ูู
ูููุง ุฃู ูููู ู
ุชุบูุฑูู. ููุชู
ุชุนููู ูุฐุง ุจุงูุถุจุท ูู ุชุนุฑูู ุงูููุน ุจุงูููู
ุฉ ุงูุฃุณุงุณูุฉ ููุฎุงุฑุฌ ุงูุชู ุชุญู ู
ุญู ุญุฑู ุงูุจุฏู:
interface List<out E> : Collection<E>
ููุฐุง ู
ุง ูุณู
ู ุงุฎุชูุงู ู
ููุน ุงูุฅุนูุงู. ูููุฐุง ุ ุฃุดุฑูุง ุฅูู ูู ุดูุก ูู ู
ูุงู ูุงุญุฏ ุ ูุญูุซ ูุณุชุฎุฏู
ู ุ ูู
ูุนุฏ ูุชูุงูู ูุฐุง ุงูู
ูุถูุน. ููุฐุง nishtyak.
ุนูุฏุฉ ุงูู ุงูููุฏ
ุฏุนููุง ูุนูุฏ ุฅูู ุฃุนู
ุงููุง. ููุง ูุฏููุง ุทุฑููุฉ addPlugins ุ ููู ุชุฃุฎุฐ ูุงุฆู
ุฉ:
@JvmStatic fun addPlugins (plugs: List<Plugin>) { plugs.forEach { addPlugin(it) } } , , List<EmptyPlugin>, , : <source lang="java"> final List<EmptyPlugin> pluginsToSet = Arrays.asList(new LoggerPlugin("Alog"), new SegmentPlugin());
ูุธุฑูุง ูุญูููุฉ ุฃู ุงููุงุฆู
ุฉ ูู Kotlin ูู ู
ุชุบูุฑ ู
ุดุชุฑู ุ ูู
ูููุง ุจุณูููุฉ ุชู
ุฑูุฑ ูุงุฆู
ุฉ ูุฑุซุฉ ุงูุจุฑูุงู
ุฌ ุงูู
ุณุงุนุฏ ููุง. ูู ุดูุก ุณูุนู
ู ุ ุงูู
ุชุฑุฌู
ูุง ูู
ุงูุน. ูููู ูุธุฑูุง ูุญูููุฉ ูุฌูุฏ ุงุฎุชูุงู ูู ู
ููุน ุงูุฅุนูุงู ุญูุซ ุญุฏุฏูุง ูู ุดูุก ุ ููุง ูู
ูููุง ุจุนุฏ ุฐูู ุงูุชุญูู
ูู ุงูุงุชุตุงู ุจู Java ูู ู
ุฑุญูุฉ ุงูุงุณุชุฎุฏุงู
. ูููู ู
ุงุฐุง ูุญุฏุซ ุฅุฐุง ุฃุฑุฏูุง ุญููุง ูุฌูุฏ ูุฑูุฉ ุฅุถุงููุฉ ุ ููุง ูุฑูุฏ ุฃู ูุฑุซุฉ ููุงูุ ูุง ุชูุฌุฏ ู
ุญุฏุฏุงุช ููุฐุง ุ ูููู ู
ุงุฐุงุ ูุฐุง ุตุญูุญ ุ ููุงู ุชุนููู ุชูุถูุญู. ููุทูู ุนูู ุงูุชุนููู ุงูุชูุถูุญูJvmSuppressWildcards ุ ุฃู ุฃููุง ูุนุชูุฏ ุงูุชุฑุงุถููุง ุฃู ูุฐุง ูู ุงูููุน ุงูุฐู ูุญุชูู ุนูู ุญุฑู ุจุฏู ุ ูุฅู ุงูููุน ูู ุงูู
ุชุบูุฑ ุงูู
ุดุชุฑู.
@JvmStatic fun addPlugins(plugs: List<@JvmSuppressWildcards Plugin>) { plugs.forEach { addPlugin(it) } }
ุจุงูุญุฏูุซ ุนู SuppressWildcards ุ ูููู
ุจุฅูุบุงุก ูู ูุฐู ุงูุฃุณุฆูุฉ ุ ูุชุบูุฑ ุชูููุนูุง ุจุงููุนู. ุญุชู ุฃูุซุฑ ู
ู ุฐูู ุ ุณุฃูุถุญ ูู ููู ูุจุฏู ูู ุดูุก ูู ุงูุฑู
ุฒ ุงูุจููู:

ุณุฃุฒูู ุงูุชุนููู ุงูุชูุถูุญู ู
ู ุงูุฑู
ุฒ ูู ุงูููุช ุงูุญุงูู. ููุง ุทุฑููุชูุง. ุฑุจู
ุง ุชุนูู
ุฃู ู
ุญู ุงูููุน ู
ูุฌูุฏ. ููู ุงูุฑู
ุฒ ุงููุฑุนู ุงูุฎุงุต ุจู ูุง ุชูุฌุฏ ู
ุนููู
ุงุช ุญูู ุฃู ููุน ู
ู ุงูุฃุณุฆูุฉ ูุงูุช ููุงู ุ ุจุดูู ุนุงู
ุ ุงูุฃุฏููุฉ ุงูุนุงู
ุฉ. ููู ุงูู
ุชุฑุฌู
ูุชุจุน ูุฐุง ููููุนู ูู ุงูุชุนูููุงุช ุนูู ุงูุฑู
ุฒ ุงูุซุงููู: ููุฐุง ูู ููุน ุงูุณุคุงู.

ุงูุขู ูููู
ุจุฅุฏุฑุงุฌ ุงูุชุนููู ุงูุชูุถูุญู ู
ุฑุฉ ุฃุฎุฑู ููุฑู ุฃู ูุฐุง ูู ููุนูุง ุฏูู ุงูุชุดููู.

ุงูุขู ุณูุชููู ุฑู
ุฒูุง ุงูุณุงุจู ุนู ุงูุชุฑุฌู
ุฉ ุนูู ูุฌู ุงูุชุญุฏูุฏ ูุฃููุง ูุทุนูุง ุฃุญุฑู ุงูุจุฏู. ูู
ููู ุฃู ุชุฑู ุจููุณู.
ูู
ูุง ุจุนู
ู ุฃููุงุน ู
ุชุบูุฑุฉ. .
, List . , getPlugins, . ? , , , . , Java.
final List<Plugin> plugins = Analytics.getPlugins(); displayPlugins(plugins); Analytics.getPlugins().add(new EmptyPlugin());
, - , , - . , . , - .
. Kotlin , , , , , wildcards Java. , , . , List, Plugin. , , , : Plugin, .
. , , usecase, - , .
, , , - . , Java. Kotlin List โ read only-, , Java โ ? , List wildcard. , . @JvmWildcard : , . , Java . Java ยซ ?ยป:

List<? extends Plugin>, ยซ ?ยป , , . script kiddie, ยซ , , , ArrayList, ยป. , ArrayList , .
((ArrayList<Plugin>) Analytics.getPlugins()).add(new EmptyPlugin());
, , , defensive-, - . , , , script kiddies .
@JvmStatic fun getPlugins(): List<@JvmWildcard Plugin> = plugin.toImmutableList()
, @JvmSuppressWildcard , , , , .
, . , : .
Java. , :
@Override public void send(@NotNull Event event) throws IOException
:
interface Plugin { fun init() fun send(event: Event)
Kotlin checked exception. : . , , . Java -. : ยซ Throws - , ยป:

-, Kotlin? , โฆ
@Throws, . throws- . , IOExeption:
open class EmptyPlugin : Plugin { @Throws(IOException::class) override fun send(event: Event) {}
:
interface Plugin { fun init() @Throws(IOException::class) fun send(event: Event)
? , Java, exception, . , . , - , , @JvmName. .
, Java . โฆ
package util fun List<Int>.printReversedSum() { println(this.foldRight(0) { it, acc -> it + acc }) } @JvmName("printReversedConcatenation") fun List<String>.printReversedSum() { println(this.foldRight(StringBuilder()) { it, acc -> acc.append(it) }) }
, Java , . , IDE . , ? , , , List, List. , type erasure. :

, , top-level c. printReversedSum List, List. Kotlin- , Java- . , kotlin.jvm , Java , , Kotlin . โ , concatenation โ , .
. . extension- reverse.
inline fun String.reverse() = StringBuilder(this).reverse().toString() inline fun <reified T> reversedClassName() = T::class.java.simpleName.reverse() inline fun <T> Iterable<T>.forEachReversed(action: (T) -> Unit) { for (element in this.reversed()) action(element) }
reverse , ReverserKt.
private static void useUtils() { System.out.println(ReverserKt.reverse("Test")); SumsKt.printReversedSum(asList(1, 2, 3, 4, 5)); SumsKt.printReversedConcatenation(asList("1", "2", "3", "4", "5")); }
, , . , , Java, - . . ? , @JvmName, , .
, , , , , .
@file:Suppress("NOTHING_TO_INLINE") @file:JvmName("ReverserUtils")
Java ReverserKt, , ReverserUtils . ยซ 2.1ยป โ , top-level , . , , sums.kt SumsKt, , reversing ReverserUtils. @JvmName, ยซReverserUtilsยป, , , , .
, , ยซ , -ยป. ? @JvmMultifileClass, , , .
"@file:JvmMultifileClass", SumsKt ReverserUtils, โ . !
, . , , . , , , @JvmName Kotlin.
Kotlin-
, , . , Kotlin- .
, inline-. Kotlin , , Java ? , , , Java. , , Kotlin-only , dex count limit. Kotlin , .
Reified type parameters. Kotlin, - , Java . Kotlin-only , Kotlin, Java reified, .
java.lang.Class. , Java, . . ยซ Retrofitยป, ( , ):
class Retrofit private constructor( val baseUrl: String, val client: Client ) { fun <T : Any> create(service: Class<T>): T {...} fun <T : Any> create(service: KClass<T>): T { return create(service.java) } }
, Java, , KClass, , extension-, KClass Class, Class KClass ( Kotlin, ).
, . Kotlin- KClass, Reified-, :
inline fun <reified T : Any> create(): T { return create(T::class.java.java)
. Kotlin , .
val api = retrofit.create(Api::class) val api = retrofit.create<Api>() , ::class . Reified-, -.
Unit. Unit, , void Java, . . , . - Scala, Scala , - , , , void.
Kotlin . Kotlin 22 , - . , , Unit, void, Unit. . , Unit? , . .
inline fun <T> Iterable<T>.forEachReversed(action: (T) -> Unit) { for (element in this.reversed()) action(element) }
Kotlin: , method reference, , , .
private fun useMisc() { listOf(1, 2, 3, 4).forEachReversed(::println) println(reversedClassName<String>()) }
Java? Java :
private static void useMisc() { final List<Integer> list = asList(1, 2, 3, 4); ReverserUtils.forEachReversed(list, integer -> { System.out.println(integer); return Unit.INSTANCE; });
- , - . Void , . , void, . , , , . , Unit . null, . , .
: Typealiases โ , , Kotlin, Java, , , . , - . Java- .
: visibility. , internal visibility. , Kotlin package private, - , public. internal. Internal โ , . Retrofit internal- validate.
internal fun validate(): Retrofit { println("!!!!!! internal fun validate() was called !!!!!!") return this }
Kotlin, . Java? validate? , , internal public. , Kotlin bytecode viewer.

public, , , , , , API . - 80 , .
Java :
final Api api = retrofit .validate$production_sources_for_module_library_main() .create(Api.class); api.sendMessage("Hello from Java"); }
. , , , . , let me explain this to you. , ?
final Api api = retrofit .validate$library() .create(Api.class); api.sendMessage("Hello from Java"); }
. ยซ ?ยป โฆ MAGIC!
, - internal, , API. script kiddie Kotlin Bytecode Viewer, . internal visibility.
, . , ,
, , SkillsMatter. .
, Kotlin-. , - , . Kotlin bytecode viewer .
ุดูุฑุง ูู!
, : 8-9 Mobius , . โ , .