Jakie jest zamierzone znaczenie „obiektu towarzyszącego”? Do tej pory używałem go tylko do zastępowania Javy, static
kiedy jej potrzebuję.
Mylę się z:
- Dlaczego nazywa się to „towarzyszem”?
- Czy to oznacza, że aby utworzyć wiele właściwości statycznych , muszę je zgrupować w
companion object
bloku? - Często piszę, aby natychmiast utworzyć pojedynczą instancję, która jest ograniczona do klasy
:
companion object {
val singleton by lazy { ... }
}
co wydaje się być jednostkowym sposobem na zrobienie tego. Jaki jest lepszy sposób?
źródło
Ten obiekt jest towarzyszem instancji. IIRC toczyła się tu długa dyskusja: przemyślenie nadchodzącej zmiany klasy obiektów
Tak. Każda „statyczna” właściwość / metoda musi zostać umieszczona wewnątrz tego elementu towarzyszącego.
Nie tworzysz instancji singleton od razu. Jest tworzony podczas
singleton
pierwszego dostępu .Raczej idź
object Singleton { }
do zdefiniowania klasy singleton. Zobacz: Deklaracje obiektów Nie musisz tworzyć instancjiSingleton
, po prostu używaj jej w ten sposóbSingleton.doWork()
Pamiętaj tylko, że Kotlin oferuje inne rzeczy do uporządkowania kodu. Istnieją teraz alternatywy dla prostych funkcji statycznych, np. Zamiast tego można użyć funkcji najwyższego poziomu.
źródło
Dlaczego nazywa się to „towarzyszem”?
Deklarację obiektu wewnątrz klasy można oznaczyć słowem kluczowym companion:
Elementy członkowskie obiektu towarzyszącego można wywołać, używając po prostu nazwy klasy jako kwalifikatora:
Jeśli używasz tylko „obiektu” bez „towarzysza”, musisz zrobić to w następujący sposób:
W moim rozumieniu „towarzysz” oznacza, że ten obiekt jest towarzyszem klasy zewnętrznej.
źródło
Można powiedzieć, że towarzysz jest taki sam jak „Blok statyczny”, jak Java, ale w przypadku Kotlina nie ma koncepcji bloku statycznego, w ramce pojawia się towarzysz.
Jak zdefiniować blok towarzyszący:
Metoda wywoływania bloku towarzyszącego, bezpośrednio z nazwą klasy
źródło