Na classe Kotlin, tenho parâmetro do método como objeto (Veja doc Kotlin aqui ) para o tipo de classe T . Como objeto, estou passando diferentes classes quando estou chamando o método. Em Java, podemos comparar a classe usando o instanceof
objeto de qual classe ela é.
Então, eu quero verificar e comparar em tempo de execução qual classe é essa?
Como posso verificar as instanceof
aulas no kotlin?
kotlin
kotlin-extension
pRaNaY
fonte
fonte
Podemos verificar se um objeto está em conformidade com um determinado tipo em tempo de execução usando o
is
operador ou sua forma negada!is
.Exemplo:
if (obj is String) { print(obj.length) } if (obj !is String) { print("Not a String") }
Outro exemplo no caso de objeto personalizado:
Deixe, eu tenho um
obj
tipoCustomObject
.if (obj is CustomObject) { print("obj is of type CustomObject") } if (obj !is CustomObject) { print("obj is not of type CustomObject") }
fonte
if
,obj
é automaticamente convertido paraString
. Portanto, você pode usar propriedades comolength
diretamente, sem a necessidade de converter explicitamenteobj
paraString
dentro do bloco.Você pode usar
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 */ } }
fonte
Tente usar uma palavra-chave chamada
is
Referência da página oficialif (obj is String) { // obj is a String } if (obj !is String) { // // obj is not a String }
fonte
Você pode ler a documentação do Kotlin aqui https://kotlinlang.org/docs/reference/typecasts.html . Podemos verificar se um objeto está em conformidade com um determinado tipo em tempo de execução usando o
is
operador ou sua forma negada!is
, por exemplo, usandois
: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 }
então, na função principal, tento imprimir e mostrar no terminal:
fun main() { val stringResult = getResult("Kotlin") val intResult = getResult(100) // TODO 2 println(stringResult) println(intResult) }
Esta é a saída
6 500
fonte
Você pode verificar assim
private var mActivity : Activity? = null
então
override fun onAttach(context: Context?) { super.onAttach(context) if (context is MainActivity){ mActivity = context } }
fonte
Outra solução: KOTLIN
val fragment = supportFragmentManager.findFragmentById(R.id.fragment_container) if (fragment?.tag == "MyFragment") {}
fonte