Nasza strona używa cookies. Dowiedz się więcej o celu ich używania i zmianie ustawień w przeglądarce. Korzystając ze strony, wyrażasz zgodę na używanie cookies, zgodnie z aktualnymi ustawieniami przeglądarki. Rozumiem

Używanie stdlib Kotlin w Javie

Victoria Gonda Android Engineer / Buffer
Sprawdź, jak używać funkcji Kotlina stdlib w Javie, unikając potrzeby budowania skomplikowanych klas pomocniczych.
Używanie stdlib Kotlin w Javie

Kotlin daje do dyspozycji sporo metod pomocniczych. Obejmują na przykład metody pomocnicze dla łańcuchów znaków, tak jak zmianę pierwszej litery łańcucha na wielką.


"some string".capitalize()


Na pewno niejeden programista Kotlina tworzył klasę StringUtils w Javie, by mieć tego typu funkcje. Jedną z wielkich zalet Kotlina jest to, że eliminuje on potrzebę użycia wielu z klas util. Co więcej, Kotlin ma funkcje rozszerzające, co daje złudzenie, że każdą z tych metod pomocniczych możemy wywołać na instancji obiektu.

To jest świetne. Jednak wielu z nas pracuje w mieszanych projektach, używając zarówno Kotlina, jak i Javy. Z tego powodu możemy ulec pokusie trzymania się naszych klas Util w javowych częściach kodu. Wydaje się to niesprawiedliwe, ale czego innego się spodziewać? Taka duplikacja kodu wydaje się konieczna, jeśli nasz projekt nie jest w pełni realizowany w Kotlinie.

public static String capitalize(String original) {
    if (TextUtils.isEmpty(original)) {
        return original;
    }

    return original.substring(0, 1).toUpperCase() +
            original.substring(1);
}


Jednak nie jestem fanem takiego powielania. Kotlin już udostępnia taką metodę, a my mamy Kotlin w naszym projekcie. Musi być sposób na ponowne wykorzystanie.

Kotlin używa Java String i jest w stanie zapewnić dodatkowe funkcje za pomocą funkcji rozszerzającej. Jeśli dekompilujesz kod, funkcje rozszerzające są niczym więcej niż statycznymi metodami pomocniczymi tworzonymi w Javie. Inną rzeczą, której możemy się nauczyć, jest to, że nazwa klasy jest taka sama jak nazwa pliku.

Na podstawie tych informacji powinniśmy również móc korzystać z takich funkcji statycznych w Javie. Aby to zrobić, musimy znać ich nazwę. Rozszerzenia łańcuchów znaków można znaleźć w StringsKt. Zaimportuj to, by móc ich używać.

import kotlin.text.StringsKt;


W Javie nie można używać tej samej składni do wywołania funkcji rozszerzającej bezpośrednio na obiekcie. Tutaj powinna zostać użyta metoda statyczna.

StringsKt.capitalize(day)


Możesz teraz wyeliminować niektóre z własnych metod pomocniczych i używać rozszerzeń Kotlina w tych miejscach.


Gdzie mieszczą się te funkcje?

Właśnie tam znajdują się rozszerzenia String. Jak je znalazłem i jak znaleźć rozszerzenia dla innych klas? Odpowiedź: pozwól edytorowi Ci pomóc.

Prawdopodobnie istnieje wiele sposobów za zlokalizowanie ich, ale pozwalam Android Studio, żeby mi pomógł. Działa to również w IntelliJ.

Na początek spojrzałem na funkcję rozszerzającą, której szukałem, autouzupełniając w pliku Kotlin. Na liście rozwijanej obok nazwy funkcji capitalize znajduje się dodatkowy tekst „for String in kotlin.text”. Szczególnie ten "kotlin.text" powinien wyglądać znajomo, bo to w końcu to, czego użyliśmy w imporcie.

Autouzupełnianie Kotlina dla String.capitalize()

Następnie wróciłam do mojego pliku Java. Wiem, że jeśli nie doda się adnotacji, klasa będzie nazywać się tak samo jak plik. „StringKt” brzmi rozsądnie. Autouzupełnienie podpowiada "StringsKt" jako jedną z opcji, więc to dobry strzał.

Autouzupełnianie Javy dla StringKt

Okazuje się, że to klasa, która  była potrzebna do wywołania funkcji rozszerzającej. Mam nadzieję, że ten tutorial przyda Ci się w praktyce.


Oryginał tekstu w języku angielskim przeczytasz tutaj.

Lubisz dzielić się wiedzą i chcesz zostać autorem?

Podziel się wiedzą z 160 tysiącami naszych czytelników

Dowiedz się więcej