面试题答案
一键面试以下以Kotlin语言为例实现:
data class ResultObject(
var property1: String? = null,
var property2: Int? = null
)
fun processString(input: String?): ResultObject? {
return input
?.let { nonNullInput ->
if (nonNullInput.length <= 10) {
ResultObject().apply {
property1 = nonNullInput
property2 = nonNullInput.length
}
} else {
ResultObject().apply {
property1 = nonNullInput.substring(0, 10)
property2 = nonNullInput.length
}
}
}
}
每一步操作意义
input?.let
:let
函数用于对可空对象进行操作。这里input
是可空字符串,?.
表示如果input
不为空才执行let
块中的代码。let
块中的nonNullInput
就是确保不为空的input
。if - else
判断:根据字符串长度进行不同处理。ResultObject().apply
:apply
函数用于对对象进行配置。这里创建ResultObject
实例后,通过apply
设置其property1
和property2
属性。
为何选择这样的组合方式
- 使用
let
首先进行非空判断,保证后续操作的安全性,并且在let
块内可以安全地使用非空对象。 - 使用
apply
方便地对创建的ResultObject
实例进行多个属性设置,它返回的就是调用它的对象本身,符合链式调用要求。这样的组合简洁明了地实现了对字符串先非空判断,再根据长度处理并设置对象属性的业务逻辑。