Reputation: 25312
In Kotlin class, I have method parameter as object (See Kotlin doc here ) for class type T. As object I am passing different classes when I am calling method.
In Java we can able to compare class using instanceof
of object which class it is.
So I want to check and compare at runtime which Class it is?
How can I check instanceof
class in Kotlin?
Upvotes: 273
Views: 236630
Reputation: 24472
If you have a collection of objects, you can also keep those that are specific instance:
interface Fruit
class Peach: Fruit
class Watermelon: Fruit
val fruits = listOf(
Peach(),
Peach(),
Watermelon(),
Peach(),
Watermelon()
)
val peaches = fruits.filterIsInstance(Peach::class.java)
Upvotes: 0
Reputation: 984
You can read Kotlin Documentation here https://kotlinlang.org/docs/reference/typecasts.html . We can check whether an object conforms to a given type at runtime by using the is
operator or its negated form !is
, for the example using 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
}
then in main function i try to print and show it on terminal :
fun main() {
val stringResult = getResult("Kotlin")
val intResult = getResult(100)
// TODO 2
println(stringResult)
println(intResult)
}
This is the output
6
500
Upvotes: 3
Reputation: 4800
Other solution : KOTLIN
val fragment = supportFragmentManager.findFragmentById(R.id.fragment_container)
if (fragment?.tag == "MyFragment")
{}
Upvotes: -8
Reputation: 1313
You can check like this
private var mActivity : Activity? = null
then
override fun onAttach(context: Context?) {
super.onAttach(context)
if (context is MainActivity){
mActivity = context
}
}
Upvotes: 5
Reputation: 9388
We can check whether an object conforms to a given type at runtime by using the is
operator or its negated form !is
.
Example:
if (obj is String) {
print(obj.length)
}
if (obj !is String) {
print("Not a String")
}
Another Example in case of Custom Object:
Let, I have an obj
of type CustomObject
.
if (obj is CustomObject) {
print("obj is of type CustomObject")
}
if (obj !is CustomObject) {
print("obj is not of type CustomObject")
}
Upvotes: 37
Reputation: 4392
Combining when
and is
:
when (x) {
is Int -> print(x + 1)
is String -> print(x.length + 1)
is IntArray -> print(x.sum())
}
copied from official documentation
Upvotes: 79
Reputation: 1506
Try using keyword called is
Official page reference
if (obj is String) {
// obj is a String
}
if (obj !is String) {
// // obj is not a String
}
Upvotes: 10
Reputation: 100358
Use is
.
if (myInstance is String) { ... }
or the reverse !is
if (myInstance !is String) { ... }
Upvotes: 484
Reputation: 6569
You can use 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 */ }
}
Upvotes: 10