Szukaj…


Uwagi

Konstruktor bezpieczny dla typu jest koncepcją, a nie funkcją językową, więc nie jest ściśle sformalizowany.

Typowa struktura budowniczego bezpiecznego dla typu

Pojedyncza funkcja konstruktora zwykle składa się z 3 kroków:

  1. Utwórz obiekt.
  2. Wykonaj lambda, aby zainicjować obiekt.
  3. Dodaj obiekt do struktury lub zwróć go.

Konstruktorzy bezpieczni dla typów w bibliotekach Kotlin

Koncepcja konstruktorów bezpiecznych dla typu jest szeroko stosowana w niektórych bibliotekach i frameworkach Kotlin, np .:

  • Anko
  • Wasabi
  • Ktor
  • Spec

Konstruktor struktury drzewa bezpieczny dla typu

Konstruktory można zdefiniować jako zestaw funkcji rozszerzających, przyjmujących jako argumenty wyrażenia lambda z odbiornikami. W tym przykładzie budowane jest menu JFrame :

import javax.swing.*

fun JFrame.menuBar(init: JMenuBar.() -> Unit) {
    val menuBar = JMenuBar()
    menuBar.init()
    setJMenuBar(menuBar)
}

fun JMenuBar.menu(caption: String, init: JMenu.() -> Unit) {
    val menu = JMenu(caption)
    menu.init()
    add(menu)
}

fun JMenu.menuItem(caption: String, init: JMenuItem.() -> Unit) {
    val menuItem = JMenuItem(caption)
    menuItem.init()
    add(menuItem)
}

Tych funkcji można następnie użyć do zbudowania struktury drzewiastej obiektów w prosty sposób:

class MyFrame : JFrame() {
    init {
        menuBar {
            menu("Menu1") {
                menuItem("Item1") {
                    // Initialize MenuItem with some Action
                }
                menuItem("Item2") {}
            }
            menu("Menu2") {
                menuItem("Item3") {}
                menuItem("Item4") {}
            }
        }
    }
}


Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow