2015-09-20 24 views
11

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

+0

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. –

Odpowiedz

15

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 .

+0

Tak, myślę, że 'javaClass', jak stwierdzono w innych komentarzach, jest odpowiedzią. –

+0

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 –

+0

Jeśli twoja własność jest nullable, to oczywiście musisz uruchomić 'obj? .javaClass? .name' który zwraca' null' dla wartości null – Lamorak

-3

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()); 
+1

Nie, potrzebuję go do eksperymentowania. Na przykład chcę jawnie wydrukować nazwę klasy tej zmiennej w konsoli bez wcześniejszego jej poznania. –

+0

@AlexFacciorusso Zaktualizowałem moją odpowiedź – Michael

+1

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. –

3

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") 
} 
+0

To samo, co @ Michael odpowiedź –

+0

@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) –