0Pricing
Kotlin Academy · Lezione

companion object: membri simili agli static in Kotlin

Aggiunga companion object alle classi per simulare metodi e costanti statici.

companion object: membri simili agli static in Kotlin è una lezione Kotlin Academy gratuita su CoddyKit. Questa è la lezione 2 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Kotlin Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Kotlin Academy include 4 lezioni in totale.

Niente static, ma un companion object

Kotlin non ha la parola chiave static. Al suo posto, un companion object dichiarato all'interno di una classe fornisce membri a livello di classe (simili ai membri statici).

Dichiarare un companion object

Inserisca un companion object all'interno di una classe. I suoi membri possono essere chiamati come ClassName.member.

class MathUtils {
    companion object {
        fun square(x: Int) = x * x
    }
}
fun main() {
    println(MathUtils.square(5)) // 25
}

Costanti nel companion object

Le costanti risiedono in genere nel companion object, spesso con const val per i valori letterali valutati in fase di compilazione.

class HttpClient {
    companion object {
        const val DEFAULT_TIMEOUT = 5000
        const val USER_AGENT = "MyApp/1.0"
    }
}
fun main() {
    println(HttpClient.DEFAULT_TIMEOUT)
    println(HttpClient.USER_AGENT)
}

Companion object con nome

È possibile assegnare un nome al companion object. Funzionano sia ClassName.member sia ClassName.CompanionName.member.

class Database {
    companion object Factory {
        fun create() = Database()
    }
}
fun main() {
    val db1 = Database.create()       // works
    val db2 = Database.Factory.create() // also works
    println("$db1 / $db2")
}

Pattern Factory Method

Utilizzi il companion object per creare istanze con validazione o logiche di costruzione alternative.

class User private constructor(val name: String, val email: String) {
    companion object {
        fun create(name: String, email: String): User {
            require(email.contains("@")) { "invalid email" }
            return User(name, email)
        }
    }
}
fun main() {
    val u = User.create("Ada", "ada@example.com")
    println("${u.name} <${u.email}>")
}

Implementazione delle interfacce

Il companion object stesso può implementare interfacce: è utile per combinarlo con classi che richiedono un contratto simile a quello statico.

interface Loadable<T> { fun load(): T }
class Config(val data: String) {
    companion object : Loadable<Config> {
        override fun load() = Config("loaded data")
    }
}
fun main() {
    println(Config.load().data)
}

@JvmStatic per l'interoperabilità con Java

Annoti i membri del companion object con @JvmStatic per esporli ai chiamanti Java come veri metodi statici.

class Util {
    companion object {
        @JvmStatic
        fun greet(name: String) = "Hello, $name!"
    }
}
fun main() {
    println(Util.greet("Kotlin"))
    // In Java: Util.greet("Java")
}

Accesso diretto al companion object

ClassName.Companion fa riferimento direttamente al companion object. Lo utilizzi quando deve passarlo come argomento.

class Counter {
    companion object {
        fun greet() = "hi from companion"
    }
}
fun main() {
    val ref = Counter.Companion
    println(ref.greet())
}

Companion object e funzioni top-level

Per le funzioni di utilità che non appartengono a una classe, preferisca le funzioni top-level a una classe che contiene solo un companion object.

// File-level — usually cleaner:
fun greet(name: String) = "Hi, $name!"
// Versus:
class Greeter { companion object { fun greet(n: String) = "Hi, $n!" } }
fun main() {
    println(greet("Ada"))
    println(Greeter.greet("Ada"))
}

Un solo companion object per classe

Una classe può avere al massimo un companion object. Se necessario, gli object interni normali possono contenere ulteriore stato condiviso.

class Service {
    companion object {
        val version = "1.0"
    }
    object InternalHelper { fun log() = println("internal") }
}
fun main() {
    println(Service.version)
    Service.InternalHelper.log()
}

Funzioni di estensione del companion object

È possibile estendere il companion object dall'esterno della classe, aggiungendo helper simili a metodi statici.

class Lib {
    companion object
}
fun Lib.Companion.helper() = "added later"
fun main() {
    println(Lib.helper())
}

Verifica rapida

Qual è l'equivalente Kotlin dei membri static di Java?

Riepilogo

Kotlin non dispone di static. Utilizzi un companion object per i membri a livello di classe: costanti, factory e implementazioni di interfacce. Aggiunga l'annotazione @JvmStatic per l'interoperabilità con Java, oppure utilizzi funzioni di estensione per creare helper simili a metodi statici.

Domande Frequenti

La lezione «companion object: membri simili agli static in Kotlin» è gratuita?

Sì — il testo completo di «companion object: membri simili agli static in Kotlin» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Kotlin Academy, passa a CoddyKit PRO. Il corso Kotlin Academy include 4 lezioni in totale.

Cosa imparerò in «companion object: membri simili agli static in Kotlin»?

Aggiunga companion object alle classi per simulare metodi e costanti statici. Eserciti Kotlin Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare Kotlin Academy?

Non è richiesta alcuna esperienza precedente. Kotlin Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 2 di 4.

Quanto tempo richiede la lezione «companion object: membri simili agli static in Kotlin»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione Kotlin Academy?

Sì. Ogni lezione Kotlin Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Dichiarazione object: singleton in Kotlin
  2. companion object: membri simili agli static in Kotlin
  3. Oggetti anonimi ed espressioni object
  4. Metodi factory con companion object
← Torna a Kotlin Academy