Tag: types

Java或Scala中Kotlin的types实现是不可能实现的?

我最熟悉的Javatypes擦除(及其所有的问题和好处)。 我对Kotlintypes系统的扩展可能性有一些限制,但是我不清楚types实例是如何在面向擦除的JVM上工作的。 什么是types实现,Kotlin如何在JVM上实现,这与Java的types擦除和Scala的复杂types系统有何不同?

Kotlin – 当用返回types的函数expression时

我想利用kotlin的expression式和generics方法来简化Android的共享偏好api。 而不是一直调用getString()&getInt()等,我想要做的是创建一个扩展函数,它将根据函数的返回types进行切换,并调用适当的方法。 如下所示: fun SharedPreferences.get(key: String): T? { when (T) { //how do I switch on return type and call appropriate function? is String -> getString(key, null) is Int -> getInt(key, -1) is Boolean -> getBoolean(key, false) is Float -> getFloat(key, -1f) is Long -> getLong(key, -1) } return null } 当然,这是行不通的。 但是在expression函数的返回types时有什么解决方案吗? 所有的建议都欢迎。

Kotlin:如何在运行时在OneClass 中获得实际的genericstypesT.

朋友们! 我是Kotlin的绿手,现在这是一个问题。 现在我想在OneClass中获得genericstypesT,下面是一些外围代码。 // IDatabase.kt package com.ra abstract class IDatabase { } // Database1.kt import kotlin.reflect.jvm.javaType open class Database1: IDatabase() { val tClass = this::class.supertypes[0].arguments[0].type!!.javaType as Class } // Database2.kt import kotlin.reflect.jvm.javaType open class Database2: IDatabase() { val tClass = this::class.supertypes[0].arguments[0].type!!.javaType as Class // just wrap a `object` to confort the user companion object { […]

Kotlin实体types参数不能作为函数体中的types参数

Kotlin中的特定types参数可防止types参数擦除,并允许在运行时知道types参数。 这允许以下代码编译并按预期方式运行: inline fun isA(value: Any) = value is T 但是,当我尝试使用“T”作为types参数而不是独立时,我得到一个消息,它是一个擦除types。 以下代码仅供说明用途 : inline fun isListOfA(name: String): Boolean { val candidate = Class.forName(name) return candidate is List } 这是由于技术限制吗? 如果是这样,那么这个限制是什么?

Kotlin中的通用lambda或函数值types

给定一个函数 fun to5(x: T): Int = 5 有没有可能像这样将其赋值给variables(值) funVal ? val funVal: (T) -> Int = ::to5 无 未解决的参考:T 错误? 换句话说,有可能以某种方式告诉Kotlin funValtypes声明中的T是一个types参数? 比如像这样: val funVal: (T) -> Int = ::to5 val funVal: (T) -> Int = ::to5 val funVal: (T) -> Int = ::to5 val funVal: ((T) -> Int) = ::to5 用例 我的用例是使用generics的咖喱。 概念: fun […]

Kotlin Pass中实现了一个参数化界面的types

我有以下工作的Java代码,但是当我把它转换成Kotlin,代码不能编译 Java代码 public interface Presenter { void attachView(V view); } 实现上述接口的抽象类 public abstract class BasePresenter implements Presenter { @Override public void attachView(T view) { this.view = view; } } 带有实现上述接口的Type参数的抽象类 public abstract class PresenterActivity extends BaseActivity { protected P presenter; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (presenter != null) { presenter.attachView(this); } } […]

无法在Kotlin中打印多个布尔值

我开始用kotlin语言 fun main (args:Array){ var flag1:Boolean= true //Explicit declaration var flag2: =false //Implicit declaration println(flag2 + “and ” + flag1) println(flag1) println(flag2) } 在上面的代码中,我声明了布尔型显式和隐式声明的2种types 对于上面的代码,我会说预计下面的输出: false and true true false 但我越来越跟随erroe: 任何人都可以解释我去哪里错了?

如何在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 […]