Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/37.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
Generics Kotlin中的协变函数参数_Generics_Kotlin_Covariance - Fatal编程技术网

Generics Kotlin中的协变函数参数

Generics Kotlin中的协变函数参数,generics,kotlin,covariance,Generics,Kotlin,Covariance,我想实现一个函数,它可以选择接受一个活动类并重定向到它。如果未提供类,则将使用默认值 用Java我会的 public void onComplete(@Nullable Class<? extends Activity> redirectTarget) { if (redirectTarget == null) redirectTarget = DefaultActivity.class; ContextCompat.startActivity(context, ne

我想实现一个函数,它可以选择接受一个活动类并重定向到它。如果未提供类,则将使用默认值

用Java我会的

public void onComplete(@Nullable Class<? extends Activity> redirectTarget) {
    if (redirectTarget == null) redirectTarget = DefaultActivity.class;
    ContextCompat.startActivity(context, new Intent(context, redirectTarget), null);
}

如何实现接受任何活动类的函数?

这与差异无关。这是一个关于如何使用泛型的问题

假设您有一个函数:

fun <T> print(toPrint: T) = println(toPrint.toString())
在这样一个合法的世界中,如果调用指定类型而不是参数的函数,会发生什么?例如:

print<Int>()
print()
默认参数的类型与调用站点的类型不匹配

那么如何着手解决您的问题呢?
事实证明,您甚至不需要泛型函数,您可以这样做:

fun onComplete(redirectTarget: Class<out Activity> = DefaultActivity::class.java) {
    ContextCompat.startActivity(context, Intent(context, redirectTarget), null)
}
fun onComplete(重定向目标:Class=DefaultActivity::Class.java){
ContextCompat.startActivity(上下文,意图(上下文,重定向目标),null)
}

这与差异无关。这是一个关于如何使用泛型的问题

假设您有一个函数:

fun <T> print(toPrint: T) = println(toPrint.toString())
在这样一个合法的世界中,如果调用指定类型而不是参数的函数,会发生什么?例如:

print<Int>()
print()
默认参数的类型与调用站点的类型不匹配

那么如何着手解决您的问题呢?
事实证明,您甚至不需要泛型函数,您可以这样做:

fun onComplete(redirectTarget: Class<out Activity> = DefaultActivity::class.java) {
    ContextCompat.startActivity(context, Intent(context, redirectTarget), null)
}
fun onComplete(重定向目标:Class=DefaultActivity::Class.java){
ContextCompat.startActivity(上下文,意图(上下文,重定向目标),null)
}

我现在不知道为什么会这样,但您只需要将其转换为
类。把你的函数改成这个

fun <T : Activity> onComplete(redirectTarget: Class<in T> = DefaultActivity::class.java as Class<T>) {
    ContextCompat.startActivity(context, Intent(context, redirectTarget), null)
}
你可以这样使用它

MainActivity::class.java.onComplete()
和默认类

null.onComplete()

我现在不知道为什么会这样,但您只需要将其转换为
。把你的函数改成这个

fun <T : Activity> onComplete(redirectTarget: Class<in T> = DefaultActivity::class.java as Class<T>) {
    ContextCompat.startActivity(context, Intent(context, redirectTarget), null)
}
你可以这样使用它

MainActivity::class.java.onComplete()
和默认类

null.onComplete()
试试这个:

fun onComplete(redirectTarget:Class<out Activity> = DefaultActivity::class.java){
    ContextCompat.startActivity(context, Intent(context, redirectTarget), null)
}
fun onComplete(重定向目标:Class=DefaultActivity::Class.java){
ContextCompat.startActivity(上下文,意图(上下文,重定向目标),null)
}
试试这个:

fun onComplete(redirectTarget:Class<out Activity> = DefaultActivity::class.java){
    ContextCompat.startActivity(context, Intent(context, redirectTarget), null)
}
fun onComplete(重定向目标:Class=DefaultActivity::Class.java){
ContextCompat.startActivity(上下文,意图(上下文,重定向目标),null)
}