使用布尔泛型的Kotlin继承

vih*_*kat 9 android kotlin

当我尝试使用Boolean,Double,Integer,Float覆盖泛型方法时,我遇到了问题.它适用于Date.(可能因为它是Serializable吗?)

界面:

interface AnInterface<C, T> {
    fun doSomething(items: List<T>, vararg value: C): List<T>
}
Run Code Online (Sandbox Code Playgroud)

一个抽象的实现:(没有覆盖doSomething)

abstract class BaseClass<C, T> : AnInterface<C, T> { ... }
Run Code Online (Sandbox Code Playgroud)

这是工作:

class AnImplementetion<T> : BaseClass<Date, T>() {

    override fun doSomething(items: List<T>, vararg value: Date): List<T> {
            // It works
    }
}
Run Code Online (Sandbox Code Playgroud)

它不起作用:

class AnAnotherImplementetion<T> : BaseClass<Boolean, T>() {

    override fun doSomething(items: List<T>, vararg value: Boolean): List<T> {
            // It doens't
    }
}
Run Code Online (Sandbox Code Playgroud)

IDE总是希望实现doSomething.当我用IDE实现它时,它总是创建相同的.

错误信息:

Class 'AnAnotherImplementetion' is not abstract and does not implement abstract base class member
public abstract fun fun doSomething(items: List<T>, vararg value: Boolean): List<T> defined in BaseClass

'doSomething' overrides nothing
Run Code Online (Sandbox Code Playgroud)

我该如何解决?谢谢

更新: 它适用于JAVA.但为什么不和Kotlin一起?

public class AnAnotherImplementetion<T> extends BaseClass<Boolean, T> {

    @NotNull
    @Override
    public List<T> doSomething(@NotNull List<? extends T> items,  Boolean... value) {
        // It works with JAVA

    }
}
Run Code Online (Sandbox Code Playgroud)

更新2:

它在vararg可以为空时起作用.

interface AnInterface<C, T> {
    fun doSomething(items: List<T>, vararg value: C?): List<T>
}
Run Code Online (Sandbox Code Playgroud)

Ufk*_*oku 5

它看起来像kotlin编译器中的一个bug.据我所知,在编译期间它决定使用原始类型(int)或wrap(Integer).Java泛型不能用于原语,因此编译器使用wrap for generic-type,然后编译器看到,该方法param永远不为null并用primitive-type替换它,并且出现type-conflict.这里可以节省一天.
但我不确定,这只是猜测.