Pour apprendre le concept d'interface et la réutilisabilité des objets, qui sont importants dans l'orientation des objets ["Introduction aux modèles de conception appris en langage Java"](https://www.amazon.co.jp/%E5%A2%97% E8% A3% 9C% E6% 94% B9% E8% A8% 82% E7% 89% 88Java% E8% A8% 80% E8% AA% 9E% E3% 81% A7% E5% AD% A6% E3% 81% B6% E3% 83% 87% E3% 82% B6% E3% 82% A4% E3% 83% B3% E3% 83% 91% E3% 82% BF% E3% 83% BC% E3% 83% B3% E5% 85% A5% E9% 96% 80-% E7% B5% 90% E5% 9F% 8E-% E6% B5% A9 / dp / 4797327030 / ref = sr_1_1? __Mk_ja_JP =% E3% 82% AB % E3% 82% BF% E3% 82% AB% E3% 83% 8A & mots-clés = java% E8% A8% 80% E8% AA% 9E% E3% 81% A7% E5% AD% A6% E3% 81% B6 % E3% 83% 87% E3% 82% B6% E3% 82% A4% E3% 83% B3% E3% 83% 91% E3% 82% BF% E3% 83% BC% E3% 83% B3% E5 J'ai entendu parler de% 85% A5% E9% 96% 80 & qid = 1559563427 & s = gateway & sr = 8-1) et j'ai décidé d'écrire en kotlin en plus de Java. Cette fois, je vais résumer Singleton.
Singleton est un terme qui fait référence à un ensemble qui n'a qu'un seul élément et qui est défini comme un modèle qui joue les rôles suivants.
Dans cette classe, le membre singleton
défini comme un champ statique est initialisé avec une instance de la classe Singleton, mais il n'est initialisé qu'une seule fois lorsque la classe est chargée.
De plus, il est garanti qu'une seule instance sera créée en empêchant l'accès de l'extérieur avec private.
Pour kotlin, il n'y a pas de définition de statique, définissez plutôt un objet compagnon
.
De plus, si vous définissez «objet compagnon» et que vous le décompilez, il sera accessible depuis getter / setter via l'objet Companion, utilisez donc const ou @JvmField. Cependant, comme const est uniquement de type primitif ou de type String, @JvmField est spécifié pour le type non primitif, et si @JvmField est spécifié pour le type primitif, la valeur initiale est affectée deux fois, il est donc nécessaire de l'utiliser correctement. Cependant, @JvmField est utilisé pour donner de la visibilité au champ, il ne peut donc pas être utilisé dans ce domaine privé.
Référence: [Kotlin] [Java] Mémo de comparaison Kotlin Java Calling Kotlin from Java
__ Addendum: @sdkei Merci pour votre avis! __
Après avoir reçu un examen, on dit que Kotlin peut être implémenté plus facilement en utilisant la déclaration d'objet même si elle n'est pas implémentée comme décrit ci-dessus.
⇒Singleton2.kt
,SingletonSample2.kt
Référence: Modèle de conception avec Kotlin Singleton Expressions et déclarations d'objets
Singleton.java
class Singleton {
private static Singleton singleton = new Singleton();
private Singleton() {
System.out.println("Créé une instance.");
}
public static Singleton getInstance() {
return singleton;
}
}
Singleton.kt
class Singleton {
init { println("Créé une instance.") }
companion object {
private val singleton = Singleton()
fun getInstance() = this.singleton
}
}
Singleton2.kt
object Singleton {
init { println("Créé une instance.") }
}
SingletonSample.java
public class SingletonSample {
public static void main(String[] args) {
System.out.println("Start.");
Singleton s1 = Singleton.getInstance();
Singleton s2 = Singleton.getInstance();
if (s1 == s2) {
System.out.println("s1 et s2 sont la même instance.");
} else {
System.out.println("s1 et s2 ne sont pas la même instance.");
}
System.out.println("End.");
}
}
SingletonSample.kt
fun main(args: Array<String>) {
println("Start.")
val s1 = Singleton.getInstance()
val s2 = Singleton.getInstance()
if (s1 == s2) println("s1 et s2 sont la même instance.")
else println("s1 et s2 ne sont pas la même instance.")
println("End.")
}
SingletonSample2.kt
fun main(args: Array<String>) {
println("Start.")
val s1 = Singleton
val s2 = Singleton
if (s1 == s2) println("s1 et s2 sont la même instance.")
else println("s1 et s2 ne sont pas la même instance.")
println("End.")
}
Résultat d'exécution
Start.
Créé une instance.
s1 et s2 sont la même instance.
End.
J'ai appris que le membre singleton
défini comme un champ statique est initialisé une seule fois lorsque la classe Singleton est chargée, et est privé pour empêcher l'accès externe afin de garantir qu'une seule instance est créée. Il est.
J'ai également appris que les garanties ci-dessus sont bénéfiques pour les implémentations qui doivent être uniques, telles que les numéros de série.
J'ai appris les points suivants sur Kotlin
objet compagnon {}
au lieu de statiqueconst
pour le type primitif et le type String, et @ JvmField
pour le type non primitif.C'était très facile à lire et à comprendre en se référant à ce qui suit.
Comment écrire un membre statique dans Kotlin? [Kotlin] [Java] Mémo de comparaison Kotlin Java Calling Kotlin from Java Modèle de conception avec Kotlin Singleton Expressions et déclarations d'objets