2017-04-08 11 views
7

Jak getter lub seter properties zazwyczaj nie mają funkcji jako argument ani reified typu, co byłoby w przypadku świadczenia/używanie użyciu inline właściwości?Jakie są przypadki użycia właściwości inline Kotlin?

Jeśli korzyścią byłaby redukcja kosztów związanych z wywołaniem metody, to dlaczego nie wszystkie domyślnie ustawiać interter właściwości?

Kotlin Inline Properties

Np.

val foo: Foo 
    inline get() = Foo() 

var bar: Bar 
    get() = ... 
    inline set(v) { ... } 
+1

Inline ma koszt pod względem generowanego kodu, co z kolei powoduje presję na pamięć podręczną. –

+1

Funkcja inline AFAIK jest dostosowana do funkcji wyższego rzędu, aby wygenerowany kod wyglądał bardziej jak java, lub innymi słowy, wygeneruje pełną metodę dla funkcji wyższego rzędu. Nigdy nie widziałem takiego akcesora –

Odpowiedz

7

Oto właściwości inline discussion:

Przykład reified parametr Typ:

inline val <reified T : PsiElement> T.nextSiblingOfSameType: T? 
    get() = PsiTreeUtil.getNextSiblingOfType(this, T::class.java) 

Inny przypadek użycia do zakrycia pewne właściwości z binarnym interfejsu biblioteki. W standardowej bibliotece Kotlin wraz z adnotacją @InlineOnly może to w przyszłości umożliwić wykluczenie deklaracji takich właściwości z plików klas, redukując liczbę metod, co przyniesie głównie korzyści Androidowi z jego ograniczeniem metody 64K.

Powiązane problemy