我的应用程序需要允许添加到列表视图。 我想通过使用observableArrayList动态添加到列表视图。 如果我点击按钮,项目被添加到列表并显示。 现在我正在努力添加一个点击处理程序(我想处理当有人点击列表视图中的任何项目时发生的事件)。 我在哪里做这个? 这是我的代码。 package someapp import javafx.collections.FXCollections import javafx.geometry.Pos import javafx.scene.layout.VBox import javafx.scene.text.FontWeight import tornadofx.* class MyApp : App(HelloWorld::class) { } class HelloWorld : View() { val leftSide: LeftSide by inject() override val root = borderpane { left = leftSide.root } } class LeftSide: View() { var requestView: RequestView by singleAssign() override […]
在kotlin标准库中我们有MutableMap接口,它有这个方法 public abstract fun put(key: K, value: V): V? 为什么它返回可以为空的值,如果它接受不可为空的值? 这是完成的Java互操作?
假设我有一个下列类的对象列表。 class Contact( val name: String // … ) 我想检索一个映射名称到它的次数的映射Map<String, Int> 。 在一个基于SQL的数据库,我会查询: SELECT name, count(*) FROM Contact; 在Kotlin中使用更高阶函数的最好方法是什么?
在斯卡拉,这只是map功能。 例如,如果hashMap是一个字符串的hashMap,那么你可以执行以下操作: val result : HashMap[String,String] = hashMap.map(case(k,v) => (k -> v.toUpperCase)) 但是,在Kotlin中, map将地图变成了一个列表。 在Kotlin做同样的事情是否有一种惯用的方式?
我有一个主要在Kotlin编写的项目,但有一些Java类。 现在项目进展顺利,我想增加在不同的环境之间切换的可能性,为此我使用了风味: productFlavors { prod { dimension "default" buildConfigField 'boolean', 'FABRIC', 'true' applicationId = "com.myapp" } beta { dimension "default" buildConfigField 'boolean', 'FABRIC', 'true' applicationId = "com.myapp.beta" } dev { dimension "default" buildConfigField 'boolean', 'FABRIC', 'false' applicationId = "com.myapp.dev" } } 然而,当我运行的味道是不生产(这不会改变applicationId),我得到一个Java类的ClassDefNotFoundException: Caused by: java.lang.ClassNotFoundException: Didn't find class "com.myapp.beta.ui.view.ScrollBehavior" on path: DexPathList[[zip file "/data/app/com.myapp.beta-1/base.apk"],nativeLibraryDirectories=[/data/app/com.myapp.beta-1/lib/arm64, /system/lib64, […]
我目前有2个数组,都包含5个对象。 所有对象都包含Int变量。 示例数据: data class Demo(val number: Int, val name: String) val a = Demo(12, "a") val b = Demo(1, "b") val c = Demo(3, "c") val d = Demo(5, "d") val e = Demo(17, "e") val array1 = arrayOf(a,b,c,d,e) val f = Demo(3, "f") val g = Demo(8, "g") val h = Demo(15, "h") […]
我有一个Guice Module提供一个List<String>使用@Provides方法。 class TestModule() : Module { override fun configure(binder: Binder) {} @Provides fun getStrings(): List<String> = listOf("foo", "bar") } class Test { @Test fun `provider can not deliver`() { val injector = Guice.createInjector(TestModule()) injector.getInstance(object : Key<List<String>>() {}) } } 但是,测试失败: 1) No implementation for java.util.List<? extends java.lang.String> was bound. while locating java.util.List<? extends java.lang.String> […]
我对kotlin来说是个新手,我想知道是否有可能,并且如果最好的做法是从协同对象中访问协同对象之外的方法和变量。 例如 class A { fun doStuff(): Boolean = return true companion object{ public fun stuffDone(): Boolean = return doStuff() } } 或类似的东西 谢谢
我被Kotlin lambda语法弄糊涂了。 起初,我有 .subscribe( { println(it) } , { println(it.message) } , { println("completed") } ) 这工作正常 。 然后,我将onNext移动到另一个名为GroupRecyclerViewAdapter的类,该类实现了Action1<ArrayList<Group>> 。 .subscribe( view.adapter as GroupRecyclerViewAdapter , { println(it.message) } , { println("completed") } ) 但是,我得到了错误: Error:(42, 17) Type mismatch: inferred type is () -> ??? but rx.functions.Action1<kotlin.Throwable!>! was expected Error:(42, 27) Unresolved reference: it Error:(43, 17) […]
我不确定如何清楚地说出这个问题,所以下面是同一个问题的另外两个版本: 一个结构/类可以通过委托给它的字段/属性来实现一个接口吗? 我可以将由字段/属性类型实现的接口映射到其结构/类吗? 这里是一个代码示例添加伪语法,希望显示我的意思是: public class School : IEnumerable<Student> { private List<Student> students expose IEnumerable<Student>; … } 如果这不是现在可能的话,这有可能吗? …或者这种方法存在一些严重的问题吗? 我认为这可能只是语法糖来摆脱锅炉板代码,否则将功能相同。 例: public class School : IEnumerable<Student> { private List<Student> students; … public IEnumerator<Student> GetEnumerator() { return students.GetEnumerator(); } IEnumerator IEnumerable.GetEnumerator() { return GetEnumerator(); } } } 这当然是一个非常人为和最小的例子。 当为它设计界面时,好处会更大,特别是当有很多方法“映射”的时候。 更新:我知道我提供了一个可怕的例子,但我只是想用最简单的例子。 问题的核心不在于具体的情况。 说了这么多,我的例子很糟糕。 所以,为了更好地帮助那些喜欢看到好榜样的人陪伴一个问题,这里有一个更好的例子: public interface IValidPeriod […]