Как передать это операторный параметр через функцию в Kotlin - PullRequest
0 голосов
/ 17 сентября 2018
val k = " asdfasdf "
fun test() {
    if(k is String) {
     // Do something
    }
}

Итак, как мне передать эту строку через вызовы функций например:

fun test(xxxx) {
    if(k is xxxx) {
    // do something
    }
}

Ответы [ 4 ]

0 голосов
/ 17 сентября 2018

В зависимости от ваших потребностей есть две возможности.

1.Используйте inline и параметр типа reified

Вы можете использовать ключевое слово reified для параметра типа в сочетании с функцией inline:

inline fun <reified T> test(k: Any) {
    if (k is T) {
        println("k is a T!")
    }
}

См. Документацию по reified.

2.Используйте KClass<T>

Если вы не хотите или не можете выполнять свою функцию inline, вы можете использовать параметр KClass:

fun <T : Any> test(k: Any, type: KClass<T>) {
    if (type.isInstance(k)) {
        println("k is a T!")
    }
}
0 голосов
/ 17 сентября 2018

Вы можете использовать предикат, например ::100100

fun testIt(predicate: (Any?) -> Boolean) {
  if (predicate(k)) {
    println("matches!")
  } else println("nope")
}

и назовите его следующим образом:

testIt { it is String }
testIt { it is Int }

Или вы можете использовать тип reified:

inline fun <reified T> testIt() {
  when (k) {
    is T -> println("matches!")
    else -> println("nope")
  }
}

и назовите это как:

testIt<String>()
testIt<Int>()

Для простоты я сохранил вашу текущую переменную внутри testIt -метода ... вы можете захотеть изменить его; -)

Я предположил, что переменная-член выглядит следующим образом: var k : Any? = null

0 голосов
/ 17 сентября 2018
inline fun <reified T> isType(obj: Any): Boolean {
    return obj is T
}

fun main(args: Array<String>) {
    val test = "This is a String"
    if (isType<String>(test)) {
        println("Success")
    } else {
        println("Failure")
    }
}
0 голосов
/ 17 сентября 2018

Вот так:

inline fun <reified T> testType(k: Any) {
   if(k is T) {
     println("is a ${T::class.simpleName}")
   } else {
     println("is not a ${T::class.simpleName}")
   }
}

Назовите это так:

test<String>("Hello") // is a String
test<String>(1) // is no String

Здесь дальнейшее чтение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...