Tag: generics

Kotlin拓展函数的多态性

我有几个类我不控制 ,我已经创建了几个同名的扩展方法跨几个常见的“属性”。 相同名称的扩展函数总是返回相同的值types,尽管对于每种types的接收器以不同的方式进行计算。 下面是一个基于内置types的简单例子,只有一个属性: // **DOES NOT COMPILE** // three sample classes I don’t control extended for .len inline val String.len get() = length inline val List.len get() = size inline val Sequence.len get() = count() // another class which needs to act on things with .len class Calc(val obj:T) { // HERE IS THE […]

Kotlintypes方差和星形投影

我已经阅读了这本书(Kotlin in Action,MEAP),关于types投影和星型投影的文档和文章,但是这些投影似乎仍然写得很复杂。 有人能以简单的方式解释投影背后的想法吗? 有一些适当的例子会很好。 提前致谢

如何用Kotlin interop强制执行generics

我在Kotlin中有一个方法,它返回一个通用列表的Rx Observable: public fun getObservable(): Observable<List> { return Observable.just(theList) } 因为Kotlin列表特征定义为List ,所以Java会将返回types看作Observable<List> Observable<List> 。 有没有办法告诉Kotlin编译器,Java应该将这个视为Observable<List> ? http://kotlinlang.org/docs/reference/generics.html 已更新为正确显示问题。

如何在Kotlin中实现参数化接口

我试图在Kotlin中实现两个带有参数化types的接口,并且得到了一个编译器错误:在代码的最后一行添加一个项目到容器container.add(this) Type Mismatch, Required T, Found Candy container.add(this) 。 我可以在Java 8中使用单个参数和原始types来完成这项工作,但是无法在Kotlin中使用它。 interface Container<C: Container, T: Item> { val items: MutableList } interface Item<T: Item, C: Container> { val container: C } abstract class Box<C: Box, T: Candy>(val name: String, override val items: MutableList = arrayListOf()) : Container { fun add(Item: T) {items.add(Item)} } abstract class […]

Kotlingenerics抽象类

我在Kotlin有一个抽象类: abstract class SimpleRecyclerAdapter constructor( context: Context, var data: MutableList ): RecyclerView.Adapter() { //inner class inside main abstract class Holder constructor(view: View) : RecyclerView.ViewHolder(view) {} } 一切工作正常,但我的内部类Holder没有看到outer类和datavariables的D参数 如果我把Holder类标记为inner类: abstract inner class Holder constructor(view: View) : RecyclerView.ViewHolder(view) {} D参数现在可见,但在这里 SimpleRecyclerAdapter 即时通讯得到一个错误”2 type arguments expected for class…”和在这里RecyclerView.Adapter “expected RecyclerView.ViewHolder, found VH” – 似乎像VH是不可见的。 我在哪里错了? 我需要一个inner类中的D参数,但内部关键字不工作。

Kotlinreflection+generics

编辑1:改变标题,我的坏。 我有一个界面事件 : interface Event 还有一些实现它的类,比如CustomEvent : class CustomEvent : Event { … } 我一直在尝试做的是:给定一个有事件作为参数的方法(所以,任何实现Event接口的类),像这样 fun onCustomEvent(event: CustomEvent) { … } ,我想将该事件添加到列表中。 因此,这个清单最终将会持有一堆不同的事件。 在Java中,我相信它会是这样的(可能不是100%准确的): List<Class> eventsList; …. Class param = methodThatHasSomeEventAsParam.parameterTypes[0]; if (Event.class.isAssignableFrom(param)) { Class actualParam = (Class) param; eventsList.add(actualParam); // Adds CustomEvent to the events list. } 但至于Kotlin,我真的不知道如何正确使用generics,具体是什么将是正确的翻译方式 Class 到Kotlin,保持与上面的Java代码相同的行为。 提前致谢。

Java中的Kotlingenerics错误

鉴于以下三个科林类: abstract class UseCase { fun execute(action: Action) { } } class ConcreteUseCase : UseCase<List>() class Action 我无法在java代码中编译以下行: ConcreteUseCase s = new ConcreteUseCase(); s.execute(new Action<List>());//<<<<<<< compilation error 错误说: SomeClass的<java.util.List的>不能应用于SomeClass <java.util.List > 我对kotlin还是一个新的东西,这可能是非常小的东西,但我似乎无法弄清楚。 我将不胜感激任何帮助。

Kotlin投影冗余

在阅读关于Kotlin的genericstypes变化和投影时,我想出了一个完全陌生的概念。 有人可以解释一下作者想要解释的想法是什么? 请参阅Kotlin在行动中的引用,MEAP : 没有意义得到一个已经out差异的types参数的out ,例如List 。 这意味着与List相同,因为List被声明为class List 。 Kotlin编译器会警告这样的预测是多余的。 这里有两个具体的问题: 为什么你需要添加投影已经超出投影types列表? 即使你这样做,你如何得到相同的列表?