Nie mogę znaleźć, jak uzyskać typ zmiennej (lub stałej) jako String
, jak typeof(variable)
, z językiem Kotlin. Jak to osiągnąć?Kotlin dostaje typ jako ciąg
Odpowiedz
Można zastosować jedną z metod, które najlepiej odpowiada Twoim potrzebom:
val obj: Double = 5.0
System.out.println(obj.javaClass.name) // double
System.out.println(obj.javaClass.kotlin) // class kotlin.Double
System.out.println(obj.javaClass.kotlin.qualifiedName) // kotlin.Double
Możesz bawić się z tym here .
Tak, myślę, że 'javaClass', jak stwierdzono w innych komentarzach, jest odpowiedzią. –
Nie wydaje się, że działa z typami zerowymi. Na przykład, jeśli masz 'val obj = getInt();' gdzie 'getInt()' zwraca typ 'Int?', Następnie próba 'obj.javaClass.name' powoduje błąd kompilacji –
Jeśli twoja własność jest nullable, to oczywiście musisz uruchomić 'obj? .javaClass? .name' który zwraca' null' dla wartości null – Lamorak
Szukacie operatora instanceof
instanceof kluczowe mogą być używane do sprawdzania, czy dany przedmiot jest z określonego typu
String s = "Hello";
if (s instanceof java.lang.String) {
System.out.println("is a String"); //this prints out
}
Aby uzyskać informacje o klasie obiekt, wywołaj metodę getClass
, którą ma każdy pojedynczy obiekt (znajduje się w nadklasie Object
). Zwraca obiekt class
(nieco mylące, wiem). Stamtąd możesz zadzwonić pod numer getName
lub getCanonicalName
(dowiedz się, jakie są różnice here). Tak, Twój kod będzie wyglądać następująco:
System.out.println(this.getClass().getName());
Nie, potrzebuję go do eksperymentowania. Na przykład chcę jawnie wydrukować nazwę klasy tej zmiennej w konsoli bez wcześniejszego jej poznania. –
@AlexFacciorusso Zaktualizowałem moją odpowiedź – Michael
Kompilator Kotlin (i wtyczka w edytorze IntelliJ) mówi, że metoda getClass() nie istnieje. Znalazłem członka javaClass, ale myślę, że jest to kompatybilność z Javą. Chciałbym znaleźć bardziej "rodzimy" sposób na zrobienie tego. –
http://kotlinlang.org/docs/reference/typecasts.html
if (obj is String) {
print(obj.length)
}
if (obj !is String) { // same as !(obj is String)
print("Not a String")
}
To samo, co @ Michael odpowiedź –
@michael odpowiedział w Java nie Kotlin. Ta odpowiedź od Rodrigo jest dla Kotlin, Różnica polega na tym, że 'instanceof' nie istnieje w Kotlin, ale zamiast tego operatory [' is' i '! Is'] (https://kotlinlang.org/docs/reference/typecasts. html # is-and-is-operatory) –
- 1. Android dostaje typ widoku
- 2. Co oznacza typ zwrotu Void w Kotlin
- 3. Skrzynka przełącznika jako ciąg
- 4. Jak sprawdzić typ ogólny w Kotlin?
- 5. Po tożsamości użytkownika niestandardowego, User.Identity.GetUserId() zwraca nieprawidłowy typ jako ciąg
- 6. Pobierz typ w zestawie referencyjnym, podając nazwę klasy jako ciąg?
- 7. Ciąg stały jako zlokalizowany ciąg
- 8. Kotlin wyrażenia lambda jako opcjonalny parametr
- 9. Dlaczego otrzymuję "Typ" ciąg "nie może być używany jako typ indeksu" błąd w TypeScript
- 10. Void jako typ literalny?
- 11. clojure typ konwersji ciąg symbolem
- 12. Generics kotlin
- 13. Stos śledzenia jako ciąg
- 14. Pobierz stacktrace jako ciąg
- 15. CGPath jako ciąg
- 16. JavaScript: zapisz ciąg base64 jako plik
- 17. Jackson Cofnięcie zmiennej jako ciąg JSON
- 18. Pierwsze typ zagnieżdżonego wyliczenia mającego tylko ciąg?
- 19. Typ polecenia ciąg zawierający wyrażenie Haskella
- 20. Typ klasy C++ jako argument
- 21. C struktura jako typ danych
- 22. samodzielnego stosowania jako typ rodzajowy
- 23. Przekaż tablicę jako typ szablonu
- 24. przekazać typ jako argument atrybutu
- 25. Konto Google dostaje Token
- 26. Knockoutjs dostaje obiekt nadrzędny
- 27. Jak zwiększyć adres IP reprezentowany jako ciąg?
- 28. Pandy czytające CSV jako typ łańcucha
- 29. Sprawdzanie, czy ciąg znaków jest pusty w Kotlin
- 30. UITableView dostaje lukę na górze
Powinieneś wyjaśnić, co chcesz zrobić z "typem zmiennej", jeśli na przykład sprawdzenie "jest instancją b", to nie chcesz napisu. Jeśli do wyświetlania, lub innych użyć może to być ciąg znaków. –