Tag: kotlin interop

Kotlin:如何将数组传递给Java注释

我想从package io.dropwizard.validation;使用@OneOf注解package io.dropwizard.validation; Java用法: @OneOf(value = {"m", "f"}) Kotlin用法:??? 我试过这个: @OneOf(value = arrayOf("m", "f")) 和这个: @OneOf(value = ["m", "f"]) 我得到的是: 类型推断失败。 期望的类型不匹配: 必需:字符串 找到: Array<String> Kotlin版本:1.1.2-2

Kotlin,针对Java Interop:懒惰集合的习惯类型?

针对Java互操作性时,应该使用什么类型的懒惰集合? Sequence<T>对于Kotlin调用者来说是最有意义的,因为默认情况下扩展函数是惰性的,但是强制Java调用者处理Kotlin stdlib类型并手动转换序列迭代器(序列不能扩展迭代! Iterable<T>由于在for循环中隐式使用而对Java调用者有意义,但是会导致不知情的Kotlin调用者由于非惰性扩展函数而意外地放弃了懒惰 Stream<T>对于Java和Kotlin调用者来说都是最佳的,但是可能有开销,并且是Java 8+(Kotlin目标6+)

Kotlin java抽象类IllegalAccessError

我有一个java interop和Kotlin的问题我有一个包被保护的java抽象类AbstractTest,它被用作另一个类TestHolder中的成员。 当我创建抽象类的派生实例Test,并尝试在kotlin中使用它时,我得到: java.lang.IllegalAccessError:试图从类KotlinTest访问类test.AbtractTest 相同的代码的Java版本似乎工作正常,但… package test; abstract class AbtractTest { } package test; public class Test extends AbtractTest { } package test; public class TestHolder { private AbtractTest test; public AbtractTest getTest() { return test; } public void setTest(AbtractTest test) { this.test = test; } } public class JavaTest { private TestHolder testHolder; public […]

从Java调用Kotlin内联函数

Exceptions.kt: @Suppress("NOTHING_TO_INLINE") inline fun generateStyleNotCorrectException(key: String, value: String) = AOPException(key + " = " + value) 在kotlin: fun inKotlin(key: String, value: String) { throw generateStyleNotCorrectException(key, value) } 它在kotlin中运行,并且函数被内联。 但是在Java代码中使用时,它不能被内联,并且仍然是一个正常的静态方法调用(从反编译的内容中看到)。 像这样的东西: public static final void inJava(String key, String value) throws AOPException { throw ExceptionsKt.generateStyleNotCorrectException(key, value); // when decompiled, it has the same contents as before , […]

在java项目中运行kotlin代码

我想在一个Java项目中运行glm ,但我不断得到: Exception in thread "main" java.lang.NoClassDefFoundError: kotlin/jvm/internal/Intrinsics at main.vec._2.Vec2.<init>(Vec2.kt) at main.vec._2.Vec2.<init>(Vec2.kt:23) at test.Main.main(Main.java:19) Caused by: java.lang.ClassNotFoundException: kotlin.jvm.internal.Intrinsics at java.net.URLClassLoader.findClass(URLClassLoader.java:381) at java.lang.ClassLoader.loadClass(ClassLoader.java:424) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 手动添加kotlin-reflect.jar和kotlin-runtime.jar解决了错误,但我更喜欢有一个单一的jar导入。 这是我如何构建神器: 这是内容: 我究竟做错了什么? Intellij 2016.3.1 Kotlin 1.1m03

Kotlin扩展功能访问Java专用字段

在使用Kotlin 扩展功能时,我想访问Java的专用字段 。 假设我有一个Java类ABC 。 ABC只有一个私人字段mPrivateField 。 我想在Kotlin中写一个扩展函数,无论出于什么原因都使用这个字段。 public class ABC { private int mPrivateField; } Kotlin函数将是: private fun ABC.testExtFunc() { val canIAccess = this.mPrivateField; } 我得到的错误是: Cannot access 'mPrivateField': It is private in 'ABC' 任何方式来解决这个限制?

是否可以从Java访问Kotlin typealias?

假设我有一个typealias的Kotlin函数类型的Kotlin 1.1 typealias typealias Consumer<T> = (T) -> Unit 我可以从Java访问这个 import kotlin.Unit; import kotlin.jvm.functions.Function1; Function1<? super T, Unit> action = … 在某种程度上可以通过Kotlin typealias名称(即Consumer )从Java访问Kotlin Function1接口吗?

String :: toByteArray()不能在Kotlin 中编译

下面的代码不能在Kotlin Js中编译: "My String".toByteArray() 任何想法为什么? 返回的错误是: [INFO] [INFO] — kotlin-maven-plugin:1.1.51:js (compile-js) @ client — [INFO] Kotlin version 1.1.51 (JRE 1.8.0_144-b01) [INFO] Compiling Kotlin sources from [C:\myproject\src\main\kotlin] [ERROR] C:\myproject\src\main\kotlin\mypackage\MyFile.kt: (15, 48) Unresolved reference. None of the following candidates is applicable because of receiver type mismatch: public fun Array<out Byte>.toByteArray(): ByteArray defined in kotlin.collections public fun Collection<Byte>.toByteArray(): […]

Kotlin使用Java回调接口

我有一个WebView。 我想打电话 public void evaluateJavascript(String script, ValueCallback<String> resultCallback) 这个方法。 这里是ValueCallback接口: public interface ValueCallback<T> { /** * Invoked when the value is available. * @param value The value. */ public void onReceiveValue(T value); }; 这是我的kotlin代码: webView.evaluateJavascript("a", ValueCallback<String> { // cant override function }) 任何人有想法重写kotlin的onReceiveValue方法? 我试过“转换Java到Kotlin”,但结果是下一个: v.evaluateJavascript("e") { } 谢谢!