I see a few other options not yet discussed in case it helps:
-
Use an intermediary function to copy the property values thereby making smart cast possible:
class Person(var name: String? = null, var age: Int? = null) { fun test() = test(name, age) private fun test(name: String?, age: Int?) { if (name != null && age != null) doSth(name, age) //smart cast possible } fun doSth(someValue: String, someValue2: Int) { } } -
Use an anonymous function (same idea as #1):
class Person(var name: String? = null, var age: Int? = null) { fun test() = (fun(name: String?, age: Int?) { if (name != null && age != null) doSth(name, age) //smart cast possible })(name, age) fun doSth(someValue: String, someValue2: Int) { } } -
Use default arguments to copy the property values:
class Person(var name: String? = null, var age: Int? = null) { fun test(name: String? = this.name, age: Int? = this.age) { if (name != null && age != null) doSth(name, age) //smart cast possible } fun doSth(someValue: String, someValue2: Int) { } }