Kotlin多变量空校验方法的实现
我有多个可以为空的变量,我需要检查它们的字符串和日期 我需要一个方法,在这个方法中,我向它传递X个变量,然后它返回一个空变量列表Kotlin多变量空校验方法的实现,kotlin,Kotlin,我有多个可以为空的变量,我需要检查它们的字符串和日期 我需要一个方法,在这个方法中,我向它传递X个变量,然后它返回一个空变量列表 我在想,我可以这样称呼: internal fun checkNullVariables ( var x, var y , ..... ) : MutableList<String>{ // yada yada return listOfNamesOfNullVariables } 如果只是关于日志记录,您可以: 这肯定需要反射,因为
我在想,我可以这样称呼:
internal fun checkNullVariables ( var x, var y , ..... ) : MutableList<String>{
// yada yada
return listOfNamesOfNullVariables
}
如果只是关于日志记录,您可以:
这肯定需要反射,因为您需要参数名。要使用下面的代码,您需要添加反射作为依赖项
private fun listNullProperties (vararg props: KProperty0<Any?>) : List<String> {
val list = mutableListOf<String>()
for (prop in props)
if (param.get() == null)
list.add(param.name)
return list
}
我仍然推荐Map方法。您可能希望使用来克服反射的使用
下面是一个使用具有2个日期和2个字符串的类型的示例,这两个类型都有一个可空变量和一个非空变量:
class YourData(internal val backedMap : Map<String, Any?>) {
val beginDate : Date by backedMap
val endDate : Date? by backedMap
val maybeString : String? by backedMap
val string : String by backedMap
constructor(beginDate : Date, string : String, endDate: Date? = null, maybeString : String? = null) : this(mapOf(
"beginDate" to beginDate,
"endDate" to endDate,
"maybeString" to maybeString,
"string" to string
))
}
用法如下所示:
YourData(Date(), "test string")
.getKeysWithNullValues()
.forEach(::println)
在本例中,将打印以下内容:
endDate
maybeString
你希望函数返回什么-空变量的名称?如果你只返回空变量,你只会得到一个空变量列表。。您想用它实现什么?请显示所需的输出和一个inputI示例可能会用于映射,即:fun checkNullVariablesmap:Map=Map.filterValues{it==null}。键。。。然后你可以像这样调用它:checkNullVariablesmapOfx到x,y-var到y,whatever到whatever,返回所有具有空值的键。。。或者,如果您已经有一个映射,只需:checkNullVariablesyourMapYes,我想要一个返回值为null的变量名称列表,这样我就可以在控制台上发送带有这些名称的警告。这个映射可能是一个解决方案,有没有一种方法不提供列表,而只直接将变量提供给方法?没有,我不需要记录它。我只需要空变量的名称列表,以便以后处理。这个实现并没有解决我的主要问题,那就是避免无休止的一系列if来检查null 1by1。然后它就完全没有意义了。:是的,我只是猜测OP在开发过程中只是为了调试目的而使用它,并试图保存键入。嗯。。。然后,我可能会覆盖toString以符合目的-
class YourData(internal val backedMap : Map<String, Any?>) {
val beginDate : Date by backedMap
val endDate : Date? by backedMap
val maybeString : String? by backedMap
val string : String by backedMap
constructor(beginDate : Date, string : String, endDate: Date? = null, maybeString : String? = null) : this(mapOf(
"beginDate" to beginDate,
"endDate" to endDate,
"maybeString" to maybeString,
"string" to string
))
}
fun YourData.getKeysWithNullValues() = backedMap.filterValues { it == null }.keys
YourData(Date(), "test string")
.getKeysWithNullValues()
.forEach(::println)
endDate
maybeString