当使用Kotlin for Android时,有一个特定的接口实现:从一个片段触发一个接口。 考虑一下Fragment必须将UI操作传递给父Activity的常见场景。 在Java中,我们将定义接口,创建它的“侦听器”实例,并在接口父节点中实现/覆盖动作。 这是创建一个监听器实例,对我来说不是那么简单。 一些谷歌搜索后,我find了一个实现的例子,但我不明白为什么它的作品。 有一个更好的方法吗? 为什么必须按照以下的方式来实施? class ImplementingFragment : Fragment(){ private lateinit var listener: FragmentEvent private lateinit var vFab: FloatingActionButton //Here is the key piece of code which triggers the interface which is befuddling to me override fun onAttach(context: Context?) { super.onAttach(context) if(context is FragmentEvent) { listener = context } } //Notice […]
我有项目,其中包含基于maven的混合kotlin和java代码。 如果我通过maven(从命令行)编译该项目,那就没关系 [INFO] ———————————————————————— [INFO] BUILD SUCCESS [INFO] ———————————————————————— [INFO] Total time: 30.830 s [INFO] Finished at: 2017-05-19T07:42:55+01:00 [INFO] Final Memory: 44M/482M [INFO] ———————————————————————— Java的: java version “1.8.0_91” Java(TM) SE Runtime Environment (build 1.8.0_91-b14) Java HotSpot(TM) 64-Bit Server VM (build 25.91-b14, mixed mode) 理念: IntelliJ IDEA 2017.1.3 Build #IU-171.4424.56, built on May 12, 2017 JRE: […]
尝试运行gradle任务时发生错误。 无法弄清楚还需要什么或错误是什么。 我正在做的项目有几个子项目,所以我有一个主build.gradle。 错误是我想要尝试Kotlin的子项目。 * Where: Build file ‘/home/oracle/bnc/KotlinHandler/build.gradle’ line: 13 * What went wrong: A problem occurred evaluating root project ‘KotlinHandler’. > Failed to apply plugin [id ‘kotlin’] > Could not generate a proxy class for class org.jetbrains.kotlin.gradle.tasks.KotlinCompile. 这是我失败的模块(子项目)的build.gradle。 buildscript { ext.kotlin_version = ‘1.1.2-2’ repositories { mavenCentral() } dependencies { classpath “org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version” } } […]
我有一个现有的Java类ThreadUtils ,每个方法every这样的: public class ThreadUtil { public static Thread every(int seconds, Runnable r) { Thread t = new Thread(() -> { while(true) { r.run(); try { Thread.sleep(1000 * seconds); } catch (InterruptedException e) { return; } } }); t.start(); return t; } } 我试图把它转换成Kotlin。 我有点挂在Runnable关闭。 这不合格的return : fun every(seconds: Int, r: Runnable): Thread { val […]
我想要自动生成的package.json被配置为指向Kotlin生成的JavaScript文件。 这是我目前的gradle配置: apply plugin: ‘kotlin-platform-js’ apply from: “$project.rootDir/gradle/deploy.gradle” dependencies { expectedBy project(“:”) // Compile/implementation dependencies implementation “org.jetbrains.kotlin:kotlin-stdlib-js:$kotlin_version” } apply plugin: ‘org.jetbrains.kotlin.frontend’ compileKotlin2Js { kotlinOptions.metaInfo = true kotlinOptions.sourceMap = true kotlinOptions.moduleKind = ‘commonjs’ } kotlinFrontend { sourceMaps = true npm { dependency(“kotlin”) replaceVersion(“kotlin-js-library”, “1.1.0”) } define “PRODUCTION”, true webpackBundle { bundleName = “${project.name}” sourceMapEnabled = true […]
在一个加密的linux主目录下,我的Kotlin构建(使用maven)失败,出现“java.io.FileNotFoundException(File name too long)”。 文件名看起来像这样,长度为298个字符: /home/niel/projects/project/bla/…/bla/…/bla/SomeTest$test name with spaces$1.class 测试看起来像这样: @Test fun `test with nice descriptive name`() { // … } getconf NAME_MAX /返回255 ,超过了298个文件名。 Scala有一个使用max-classfile-name选项来处理这个问题的方法。 Kotlin有没有解决这个问题的方法?
通常我发现自己为数字types创建了很多重载,因为Kotlin不会为非文字进行隐式转换。 这导致了大量的重复过载函数,这是吨和吨的样板。 我可以看到一个这样的痛苦的例子: https : //github.com/Jire/Arrowhead/blob/master/src/main/kotlin/org/jire/arrowhead/Source.kt 我明白隐式转换可能导致错误的原因,但是我认为在大多数情况下,尤其是对于像Byte -> Int和Int -> Long这样的数据没有丢失的“扩展”转换,应该有更好的方法。 所以…我的问题是你如何处理这个? 有没有创造性的方法来解决这个问题?
我有一个Grid类,包装在Cell对象的二维数组。 我希望这个类实现Iterable接口,以便在循环中使用它并直接遍历整个单元格。 有一个简单的方法来做到这一点? Kotlin是否支持yield return样式迭代器? 我目前的解决方案是相当冗长的: override fun iterator() = object : Iterator { val currentOuter = grid.iterator() // grid is object of Array<Array> var currentInner = if (currentOuter.hasNext()) currentOuter.next().iterator() else arrayOf().iterator() override fun next(): Cell { if (!hasNext()) { throw NoSuchElementException() } return if (currentInner.hasNext()) { currentInner.next() } else { currentInner = currentOuter.next().iterator() currentInner.next() […]
我想添加一个源代码src/gen/java 。 随着groovy这很容易,并已在https://discuss.gradle.org/t/how-to-use-gradle-with-generated-sources/9401/5 sourceSets { gen { java.srcDir “src/gen/java” } } 但是我坚持用kotlin-dsl来添加一个新的。 我得到的是: java { sourceSets { } } 任何人都可以在这里帮助
我想知道,在Kotlin中,有没有可能调用java方法的等价物: assertEquals(double expected, double actual, double precision) 因为每次我得到这个方法 assertEquals(expected: T, actual: T, message: String) 而我无法find具有精度参数的人。 调用Java的应该也可以,我猜。 我打电话给方法: assertEquals(5000.00, calculateCouponAmount(basicFaceValue, basicInterestRate, amortizationBullet, couponNumber1), 0.01) 我得到一个错误,因为0.01进入“消息”字段