Kotlin强制参数类型为字符串,布尔值或数字

问题描述 投票:1回答:1

[我有一个用例,向我的服务器发送一些数据(作为分析),该数据总是StringBooleanNumber

如何强制调用方只发送数字,布尔值或字符串,而不发送其他任何对象?

以下案例应该起作用-

userProperties: MutableMap<String, in AnyPrimitive> = mutableMapOf(),

userProperties.put("someKey", 1)
userProperties.put("someKey", 1.2f)
userProperties.put("someKey", "someValue")
userProperties.put("someKey", true)

我尝试的方法是创建实现EventDataCharSequence的抽象类Number。但这要求每个人都创建这些类的实例,而不仅仅是发送数字或字符串。

我可以放一个逻辑来检查类型并抛出异常,但我更希望在编译时对其进行限制。

generics kotlin primitive-types
1个回答
0
投票

如果要从使用角度简化,请像下面这样声明send函数:

fun send(arg: Any) {
    //Validations here:
    if (!validate(arg)) throw IllegalArgumentException("...")

    //Actual send code here...
}

private fun validate(arg: Any): Boolean {
    return (arg is String || arg is Boolean || arg is Number)
}

请注意,这不是在编译时强制执行,而是运行时失败。因此,如果有人编码a

send(RandomObject)

编译将成功。但是在运行时它将失败。

© www.soinside.com 2019 - 2024. All rights reserved.