问题标签 [kotlin-interop]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - Kotlin - 伴随对象的属性可见性
所以我有下面的代码,用 Kotlin 编写。
return params.keys.containsAll(MANDATORY_PARAMS)
编译器说,我在最后一条指令行 ( ) 上遇到编译错误Unsolved reference: MANDATORY_PARAMS
,但我真的不明白为什么。
我认为伴随对象应该对他们“陪伴”的类的属性有某种可见性。
我能做些什么来解决这个问题?我怎样才能使两者及其伴侣对象MANDATORY_PARAMS
都可见?MandatoryParametersValidator
(免责声明:此代码正在从 Java 迁移到 Kotlin。在 Java 版本上,mandatoryParametersHaveBeenProvided
曾经是同一类的静态方法。)
非常感谢!
mocking - 使用 Java + Mockito 模拟 Kotlin 方法
所以我将一个小型 Java 代码库迁移到 Kotlin 只是为了好玩,并且我已经迁移了这个 Java 类:
进入这个 Kotlin 表示:
但是现在我在使用 Java 编写的现有测试套件时遇到了一些问题。更具体地说,我有这个使用 Mockito 的单元测试:
它失败了when
,说
有谁知道我怎样才能使这项工作?我尝试在 Kotlin 版本上创建一个实际的 getter(而不是依赖于隐式 getter),但到目前为止没有运气。
非常感谢!
(如果你问自己为什么我从生产代码而不是测试开始,或者我为什么不使用 mockito-kotlin,这些问题没有真正的答案。就像我说的那样,我迁移只是为了好玩并且想要向我团队中的其他开发人员展示在实际项目中实现语言之间的互操作性是多么容易)
更新:我注意到如果我添加when(inputs.getParameter("key")).thenReturn("value")
到相同的setupInputs()
方法(在inputs.getEngineURL()
) 调用之前),我最终会在Inputs#getParameter
. 怎么回事?!
kotlin - Kotlin 扩展函数访问 Java 私有字段
我想在使用 Kotlin扩展功能时访问 Java 的私有字段。
假设我有一个Java类ABC
。ABC
只有一个私有字段mPrivateField
。我想在 Kotlin 中编写一个扩展函数,它出于任何原因使用该字段。
Kotlin函数将是:
我得到的错误是:
Cannot access 'mPrivateField': It is private in 'ABC'
有什么办法可以绕过这个限制?
kotlin - 如何在 kotlin 编程语言中创建如下所述的循环?
如何使用 for 循环在 kotlin 中制作它?
kotlin - Kotlin,针对 Java 互操作:惰性收集的惯用类型?
以 Java 互操作为目标时,惰性集合应该使用什么类型?
Sequence<T>
对 Kotlin 调用者最有意义,因为默认情况下它的扩展函数是惰性的,但强制 Java 调用者处理 Kotlin 标准库类型并手动转换序列迭代器(序列不扩展可迭代!)Iterable<T>
由于 for 循环中的隐式使用,对 Java 调用者有意义,但会导致毫无戒心的 Kotlin 调用者由于非惰性扩展函数而意外放弃惰性Stream<T>
最适合 Java 和 Kotlin 调用者,但可能有开销,并且是 Java 8+(Kotlin 目标 6+)
kotlin - Kotlin 构造函数委托给内部数据类?
我们有一个抽象的 Java 类(我们无法修改)AbstractClass
,我们想在 Kotlin 中实现它。一个要求是 Kotlin 实现可以使用 vanilla Jackson Databind序列化/反序列化为 JSON 。这导致我们进行了以下实现:
此类将始终从 Java 中使用,目前您可以像这样 (Java) 实例化它:
但我们更愿意像这样实例化它:
我当然可以将 Kotlin 代码更改为如下所示:
但这非常冗长,有点违背了使用 Kotlin 的目的。
我想我想做的是这样的(伪代码):
(注意构造函数by MyClassData
中的MyClass
显然不起作用)
即我想以某种方式破坏或委托 MyClass 的构造函数以采用与 MyClassData 相同的参数而不复制它们。这是您可以在 Kotlin 中做的事情,还是有另一种方法可以在不添加太多代码的情况下解决它?
java - 将 Kotlin 数组转换为 Java 可变参数
如何将我的 Kotlin 转换Array
为可变参数 Java String[]
?
spring - 如何在 kotlin 中将 @Autowired 或 @Value 等弹簧注释用于原始类型?
使用弹簧注释自动装配非基元,例如
作品。
但这不起作用:
有一个错误:
原始类型不允许使用 lateinit 修饰符。
如何将原始属性自动装配到 kotlin 类中?