Tag: 互操作

Java方法错误地自动在kotlin中重载

给定一个包含以下(精简)类的Java库: public class Vector2f { public float x; public float y; public Vector2f div(Vector2f other) { x /= other.x; y /= other.y; return this; } public Vector2f div(Vector2f other, Vector2f dest) { dest.x = x / other.x; dest.y = y / other.y; return dest; } /* … */ } 由于kotlin自动将合适的方法名称转换为重载操作符,我可以写 val v0 = Vector2f(12f, 12f) […]

如何用Kotlin interop强制执行泛型

我在Kotlin中有一个方法,它返回一个通用列表的Rx Observable: public fun getObservable(): Observable<List<FooBar>> { return Observable.just(theList) } 因为Kotlin列表特征被定义为List<out T> ,所以Java会将返回类型看作Observable<List<? extends FooBar>> Observable<List<? extends FooBar>> 。 有没有办法告诉Kotlin编译器,Java应该将这个视为Observable<List<FooBar>> ? http://kotlinlang.org/docs/reference/generics.html 已更新为正确显示问题。

将Array <Byte>转换为ByteArray的规范方法是什么?

如果有一个数组,并希望将其转换为一个ByteArray,我应该如何去做呢? 以下例如失败: var srcArray = Array<Byte>(10, { 0 }) var tgtArray: ByteArray = srcArray as ByteArray 我意识到,虽然专门的类,如ByteArray是: …与Array类无关,为了获得最佳性能,将其编译到Java的原始数组中。 所以,我的方法失败的事实不应该让我感到惊讶 – 但是转换的规范方式是什么? 简单地遍历srcArray并一次填充一个索引tgtArray – 还是有一个更优雅的解决方案,我错过了吗?

我怎样才能引用从Java的伴侣对象?

我有一个混合的项目, Java和Kotlin类,我想知道如何从Java类引用companion objects 。

在Java中使用Kotlin类:找不到符号

我已经找到了关于Android的这个类似的问题,但我使用普通的Java和Maven作为构建工具。 我认为最好发表一个新的问题。 我创建了一个Kotlin类,我试图从Java类MyKotlinClass.class 。 Maven构建失败,而IntelliJ Idea中的编译工作正常。 我已经将Kotlin插件添加到maven: <plugin> <groupId>org.jetbrains.kotlin</groupId> <artifactId>kotlin-maven-plugin</artifactId> <version>${kotlin.version}</version> <executions> <execution> <id>compile</id> <phase>compile</phase> <goals> <goal>compile</goal> </goals> </execution> <execution> <id>test-compile</id> <phase>test-compile</phase> <goals> <goal>test-compile</goal> </goals> </execution> </executions> </plugin> 但是这并没有帮助: [ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:2.3.2:compile (default-compile) on project app: Compilation failure [ERROR] MyClassLinkingKotlin.java:[100,40] error: cannot find symbol 行/列恰好引用符号MyKotlinClass.class 。 即使是这样使用也会失败: System.err.println(MyKotlinClass.class)

如何使用Kotlin匿名类作为本机JavaScript函数的参数?

我为这个 ThreeJS类设置了interop层,并且该类的构造函数接受了一个用于设置属性的对象。 //PointCloudMaterial.js THREE.PointCloudMaterial = function ( parameters ) { THREE.Material.call( this ); this.color = new THREE.Color( 0xffffff ); this.map = null; this.size = 1; this.sizeAttenuation = true; this.vertexColors = THREE.NoColors; this.fog = true; this.setValues( parameters ); }; 以下是我希望能够在Kotlin中做的事情,是否有可能以一种时尚的方式使用异常物体? 我原本是想创建一个相当于可能的周界的对象来传入,问题在于它会覆盖当前不是我想要的值。 //Interop Layer native("THREE.PointCloudMaterial") public class PointCloudMaterial(parameters: object) { } //This doesn't compile "Type Expected" //Example […]

Java项目中Kotlin的高阶函数

我有一个函数类型作为形式参数: fun doSomething(code: () -> Boolean) = false //package function in TestKt.class 我试着在Java中调用它,传入一个lambda: //Java class, in Java project class Demo { public static void main(String[] args) { TestKt.doSomething(() -> false); } } 但是我得到的错误: 无法推断功能接口类型 它适用于Java类在Kotlin项目中,但不在Java项目中。 在我的Java项目中使用来自Kotlin的类时,我没有遇到任何其他问题,例如使用kotlin.Boolean类型的kotlin方法和使用vararg参数参数。 题 我如何正确调用Java项目的doSomething函数?

混合Kotlin + Java与Maven,未解决的参考

我有一个Maven项目与Kotlin代码hello.kt调用Java代码JavaFoo.java调用Kotlin代码KotlinFoo.kt 。 hello.kt也直接调用KotlinFoo.kt 。 我试图用mvn clean install使用kotlinlang的Maven文档中描述的Maven设置来构建它。 如果hello.kt不调用JavaFoo (但是我把JavaFoo留在了项目中),那么这样做就好了。 文档中说,应该在Java编译器之前调用Kotlin编译器,这意味着所有的Kotlin代码都需要在任何Java代码之前编译,即使用这种设置,您可以从Java调用Kotlin,反之则不然。 但是,文档将这种设置描述为“混合代码应用程序”,而不是“从Java调用Kotlin”。 换句话说,这种失败似乎与文件似乎暗示的一致,但与他们直接说的不一致 – 或者我只是误解了一些东西。 我想从另一个语言中调用每种语言。 有没有一个Maven的配置,将这样做,请? (我查看了混合代码设置的各种StackExchange问​​题,而且这些解决方案都不适用于我。) 按要求添加代码:pom.xml: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.example.kotlindemo</groupId> <artifactId>kotlin-demo</artifactId> <packaging>jar</packaging> <version>1.0-SNAPSHOT</version> <name>kotlin-demo</name> <properties> <kotlin.version>1.1.2-2</kotlin.version> <kotlin.compiler.incremental>true</kotlin.compiler.incremental> <main.class>com.example.kotlindemo.HelloKt</main.class> </properties> <dependencies> <dependency> <groupId>org.jetbrains.kotlin</groupId> <artifactId>kotlin-stdlib</artifactId> <version>${kotlin.version}</version> </dependency> </dependencies> <build> <plugins> <plugin> <artifactId>kotlin-maven-plugin</artifactId> <groupId>org.jetbrains.kotlin</groupId> <version>${kotlin.version}</version> <executions> <execution> <id>compile</id> <phase>process-sources</phase> <goals> <goal>compile</goal> </goals> <configuration> […]