我将编写一个方法,如下所示:
object UIBehavior {
fun dialog(context: Context, title: Int | String, message: Int | String){
val dialogObj = AlertDialog.Builder(context)
dialogObj.setTitle(title)
dialogObj.setMessage(message)
}
}
方法 dialogObj.setTitle 和 dialogObj.setMessage 允许两种类型的参数,如何删除可使方法 dialog 仅允许两种类型Int和String的参数?
6条答案
按热度按时间vmdwslir1#
在Kotlin你不能这么做。
但是一个函数可以有多个版本,例如:
这样,您就可以简单地使用id或字符串调用该函数,看起来您正在使用同一个函数
您还可以使用
Int
和String
的公共超类型,但这将允许更多的内容,我不建议这样做。泛型在这里也不起作用,因为你不能动态地调用
dialogObj.setTitle(title)
。你必须在编译时知道你是想调用Int
还是String
重载函数。这和使用Any
也没有什么不同。z18hc3ub2#
1.泛型可以为您提供解决方案。
1.使用Any也可以是一个解决方案:
fjaof16o3#
您可以使用Generics来拥有相同的方法,并检查方法主体中的型别。
或者有两种不同的方法。
omhiaaxx4#
您可以使用Any,但我认为这根本不是一个很好的解决方案。
最好将title和message都设置为String或CharSequence,并与setTitle和setMessage作为参数的类型一致。
yuvru6vn5#
谢谢你们我在写代码
可行,但不确定是否合理
cczfrluj6#
一般解决方案:
我们可以在Kotlin中声明一个具有两种类型的变量,方法是:
*泛型和
*当表达式为密封类时。
代码:
说明:
密封类
ABClass
具有类型参数T
,密封类的后续直接子类(SealedClassA & SealedClassB)被限制为对于
data class SealedClassA
和针对
data class SealedClassB
的ClassB
因此我们只能有这两种类型。
我们将目标变量初始化为**
ABClass<Any>
(Any
**允许存储任何类型的变量,但由于密封类的定义,仅允许存储ClassA
和ClassB
)指定为
c = ABClass.SealedClassA(a)
或c = ABClass.SealedClassB(b)
其中,a是
ClassA
的示例,b是ClassB
的示例使用when表达式。可以验证所有情况,不需要在语句中添加else子句。
因此,变量
c
基本上只能存储两种类型ClassA
和ClassB
。