在Kotlin死人的开关

我想在Kotlin实施一个死人的转换 。 在接收到最后一个MyEvent之后,它会触发一个TIME_INTERVAL秒的通知。 当收到一个新的MyEvent ,它重新启动定时器。 private val stopWatch = object : () -> Unit { var timer = System.currentTimeMillis() var isRunning = false override fun invoke() { timer = System.currentTimeMillis() if (isRunning) return synchronized(this) { isRunning = true while (System.currentTimeMillis() – timer <= TIME_INTERVAL) {} fireNotification() isRunning = false } } } override fun onSomeEvent(e: […]

Kotlin难以上传到推断的(现场)参数

我不确定是否“失败”是正确的话,但这是我面临的问题。 我花了相当长的时间来重现这个最小的例子,所以在这里: class BaseParameterizedType fun <U: BaseParameterizedType> getSpecific(clazz: KClass) : U { TODO() } fun example(arg: KClass<out BaseParameterizedType>)) { getSpecific(arg.innerType) } 好的,所以上面的代码在’TODO’失败,但是如果它不在那里,并且函数正常返回,那么它肯定会失败,并产生空指针exception。 我试图弄清楚什么是错误的,所以我转向了反编译的Java代码(来自kotlin字节码): public static final void example(@NotNull KClass arg) { Intrinsics.checkParameterIsNotNull(arg, “arg”); getSpecific(arg.getInnerType()); throw null; // <– The problem } 如果我将getSpecific(clz: KClass) : U的函数签名更改为以下任何一种forms: getSpecific(clz: KClass) : U getSpecific(clz: KClass) : U getSpecific(clz: KClass) […]

如何在Kotlin中创建一个无限长的序列

我正在寻找类似的东西 val allInts = (1..).asSequence() 所以我可以,例如 allInts.take(5)

Kotlin中的整数是否等于数学expression式?

我正在制作一个解决数学expression式的程序,例如2 + 2。 我可以设置一个整数等于这样的东西: val input = “2+2” input.toInt()

为什么不聪明处理这种情况呢?

我有一些类似于这个结构的代码: private fun test() : Double { val a : Double? = 15.0 val b : Double? = 20.0 return if (a == null && b == null) { 0 } else if (a != null && b == null) { a } else if (a == null && b != null) { b } […]

如何将Kotlin的默认属性值设置为`this`

我有下面的代表简单树的类结构。 每个项目可以有多个孩子和父母。 树根虽然让我头痛。 我想这样做,而不使用null所以我可以通过调用item.parent向上遍历树。 为了简化它,我希望根本身是一个父类,但是我不知道如何去做。 interface Item { val parent: Directory } interface ItemWithChildren{ val children: MutableList } class Directory() : Item, ItemWithChildren { override val children: MutableList = mutableListOf() override val parent: Directory by lazy { this } constructor(par: Directory) : this() { parent = par //Error: val cannot be reassigned } } class […]

Mac上的Java开发 – Xcode,Eclipse或Netbeans

我一直在使用Xcode进行通常的C / C ++ / ObjC开发。 我想知道什么是实际的考虑,Xcode,Eclipse或NetBeans的使用在Mac上的Java观点的发展? 请不要在分析中包含我目前使用的Xcode。

房间:Dao的LiveData将在每次更新时触发Observer.onChanged,即使LiveData值没有变化

我发现Dao返回的LiveData将在DB更新行时调用其观察者,即使LiveData值显然没有改变。 考虑下面的例子: 示例实体 @Entity public class User { public long id; public String name; // example for other variables public Date lastActiveDateTime; } 例如道 @Dao public interface UserDao { // I am only interested in the user name @Query(“SELECT name From User”) LiveData<List> getAllNamesOfUser(); @Update(onConflict = OnConflictStrategy.REPLACE) void updateUser(User user); } 在后台线程的某处 UserDao userDao = […]

处理程序每​​5秒运行一次任务Kotlin

我想每5秒运行一段代码。 我有一个处理程序实现这个麻烦。 Kotlin如何做到这一点? 这是我到目前为止。 还要注意,variablesTimer_Preview是一个Handler。

Android Studio转换为Kotlin:在某些情况下使用@JvmStatic

我一直在Android上使用Kotlin相当集中。 这确实使编程乐趣了。 尽管如此,在某些情况下(主要是util类,名称应该是简短的),当自动将Java转换为Kotlin时,我希望在静态方法上使用@JvmStatic,而不是将调用者转换为MyClass.Companion.Bar 。 也就是说,在一些特定的情况下,拥有这个将会很好 public static foo(Barian bar) 转换成 @JvmStatic fun foo(bar:Barian) 所以我可以维护从Java的短的调用语法: MyClass.foo(bar) 而不是 MyClass.Companion.foo(bar) 显然,在大多数情况下,我认为这是不好的方式,因为很多原因,比如未来的兼容性,非Kotlin的精神等等,但是在少数情况下,它可以使Java代码(使用我的类)更短。