Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kotlin多变量空校验方法的实现_Kotlin - Fatal编程技术网

Kotlin多变量空校验方法的实现

Kotlin多变量空校验方法的实现,kotlin,Kotlin,我有多个可以为空的变量,我需要检查它们的字符串和日期 我需要一个方法,在这个方法中,我向它传递X个变量,然后它返回一个空变量列表 我在想,我可以这样称呼: internal fun checkNullVariables ( var x, var y , ..... ) : MutableList<String>{ // yada yada return listOfNamesOfNullVariables } 如果只是关于日志记录,您可以: 这肯定需要反射,因为

我有多个可以为空的变量,我需要检查它们的字符串和日期

我需要一个方法,在这个方法中,我向它传递X个变量,然后它返回一个空变量列表


我在想,我可以这样称呼:

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