Kotlin w klasie, mam parametr metody jako obiektu (patrz Kotlin doc tutaj ) dla typu klasy T . Jako obiekt przekazuję różne klasy, kiedy wywołuję metodę. W Javie możemy porównać klasę za pomocą instanceof
obiektu, która to klasa.
Więc chcę sprawdzić i porównać w czasie wykonywania, która to klasa?
Jak mogę sprawdzić instanceof
zajęcia w Kotlinie?
kotlin
kotlin-extension
pRaNaY
źródło
źródło
Możemy sprawdzić, czy obiekt jest zgodny z danym typem w czasie wykonywania, używając
is
operatora lub jego zanegowanej formy!is
.Przykład:
if (obj is String) { print(obj.length) } if (obj !is String) { print("Not a String") }
Inny przykład w przypadku obiektu niestandardowego:
Niech mam
obj
typCustomObject
.if (obj is CustomObject) { print("obj is of type CustomObject") } if (obj !is CustomObject) { print("obj is not of type CustomObject") }
źródło
if
,obj
jest automatycznie przesyłaćString
. Możesz więc używać właściwości, takich jaklength
bezpośrednio, bez konieczności jawnego rzutowaniaobj
doString
wnętrza bloku.Możesz użyć
is
:class B val a: A = A() if (a is A) { /* do something */ } when (a) { someValue -> { /* do something */ } is B -> { /* do something */ } else -> { /* do something */ } }
źródło
Spróbuj użyć słowa kluczowego o nazwie
is
Oficjalne odniesienie do stronyif (obj is String) { // obj is a String } if (obj !is String) { // // obj is not a String }
źródło
Możesz przeczytać dokumentację Kotlin tutaj https://kotlinlang.org/docs/reference/typecasts.html . Możemy sprawdzić, czy obiekt jest zgodny z danym typem w czasie wykonywania za pomocą
is
operatora lub jego zanegowanej formy!is
, na przykład za pomocąis
:fun <T> getResult(args: T): Int { if (args is String){ //check if argumen is String return args.toString().length }else if (args is Int){ //check if argumen is int return args.hashCode().times(5) } return 0 }
następnie w głównej funkcji próbuję wydrukować i pokazać to na terminalu:
fun main() { val stringResult = getResult("Kotlin") val intResult = getResult(100) // TODO 2 println(stringResult) println(intResult) }
To jest wynik
6 500
źródło
Możesz to sprawdzić
private var mActivity : Activity? = null
następnie
override fun onAttach(context: Context?) { super.onAttach(context) if (context is MainActivity){ mActivity = context } }
źródło
Inne rozwiązanie: KOTLIN
val fragment = supportFragmentManager.findFragmentById(R.id.fragment_container) if (fragment?.tag == "MyFragment") {}
źródło