Generics Kotlin:返回默认接口函数的默认泛型类型

Generics Kotlin:返回默认接口函数的默认泛型类型,generics,kotlin,Generics,Kotlin,我在接口中定义了一个函数。此函数返回一个泛型值。我希望这个值在默认情况下是一个完整的未来,因为在许多情况下,这个run函数什么都不做。我想Java中的问题也是一样的 interface Command<out Payload, CommandResult> { fun run(): CompletableFuture<CommandResult>{ return CompletableFuture.runAsync{} } } 编译器说存在类

我在接口中定义了一个函数。此函数返回一个泛型值。我希望这个值在默认情况下是一个完整的未来,因为在许多情况下,这个run函数什么都不做。我想Java中的问题也是一样的

interface Command<out Payload, CommandResult> {

   fun run(): CompletableFuture<CommandResult>{
       return CompletableFuture.runAsync{}
   }
}
编译器说存在类型不匹配


默认情况下,我们什么都不做,因此CompleteableFuture返回是好的,runAsync完成了这项工作。在某些情况下,run函数将返回一个完整的future,例如

我不认为您可以完全实现您的要求,但您可以通过将其拆分为两个接口来实现:

interface Command<out Payload, CommandResult> {
    fun run(): CompletableFuture<CommandResult>

    // other members
}

interface SimpleCommand<out Payload> : Command<Payload, Void> {
    override fun run() = CompletableFuture.runAsync{}
}

我不了解这个run函数的用途,因为您向runAsync传递了一个空的runnable。是否要允许将runnable传递到此函数?runAsync总是返回CompleteableFuture,因此将返回类型指定为CompleteableFuture是没有意义的。我希望在默认情况下,我们什么都不做,所以空返回是好的,而runAsync完成了这项工作。在某些情况下,run函数将返回CompleteableFuture,例如我以前使用命令和RunnableCommand做过类似的事情。这是可行的,但也存在一些问题。这里我有一个CommandProcessor,它必须能够运行这两个命令,而不知道它是否简单,所以我可能可以编写两个进程函数:processrunnableCommand和ProcessSimpleCommand因为SimpleCommand扩展了命令,它可以在任何可以传递命令的地方传递,您不需要为此做任何特殊的操作。