标签: kotlin-interop

将Kotlin Array转换为Java varargs

如何将我的Kotlin转换Array为varargs Java String[]

val angularRoutings = 
    arrayOf<String>("/language", "/home")

// this doesn't work        
web.ignoring().antMatchers(angularRoutings)
Run Code Online (Sandbox Code Playgroud)

如何将ArrayList传递给varargs方法参数?

java interop kotlin kotlin-interop

93
推荐指数
1
解决办法
3万
查看次数

Kotlin酒店的私人吸气剂和公共二传手

如何在Kotlin建造一个拥有私人吸气剂(或者只是没有它)但拥有公共二传手的物业?

var status
private get
Run Code Online (Sandbox Code Playgroud)

不适用于错误: Getter visibility must be the same as property visibility

在我的情况下,原因是Java互操作:我希望我的Java代码能够调用setStatus但不能getStatus.

java kotlin kotlin-interop

42
推荐指数
3
解决办法
9951
查看次数

为什么在Java中实现返回单元的Kotlin函数时必须返回Unit.INSTANCE?

如果我有Kotlin功能

fun f(cb: (Int) -> Unit)
Run Code Online (Sandbox Code Playgroud)

我想用fJava 调用,我必须这样做:

f(i -> {
     dosomething();
     return Unit.INSTANCE;
});
Run Code Online (Sandbox Code Playgroud)

这看起来很丑陋.为什么我不能这样写f(i -> dosomething());,因为Unit在Kotlin中相当于voidJava?

java kotlin kotlin-interop

38
推荐指数
1
解决办法
9341
查看次数

如何在Kotlin中实现这个Java接口?

由于Kotlin没有基元,如何实现这个接口呢?

public interface A {
  @NotNull Object get(@NotNull Integer i);
  @NotNull Object get(int i);
}
Run Code Online (Sandbox Code Playgroud)

我无法更改Java代码,因为它是二进制库中的编译类文件.

java kotlin kotlin-interop

25
推荐指数
2
解决办法
3万
查看次数

从java调用kotlin函数是java中的关键字吗?

既然new不是kotlin中的关键字,我可以在kotlin中使用以下函数.

fun new(): String {
    return "just returns some string"
}
Run Code Online (Sandbox Code Playgroud)

但我无法从java调用此函数,因为它new是java 中的关键字.我想知道java领域中是否存在此函数的别名.我没有找到任何可能是此函数的别名的intellij建议.

编辑1:

我在kotlin中编写了以下代码:

fun new(): String {
    return "just returns some string"
}

fun main(args:Array<String>){
    new()
}
Run Code Online (Sandbox Code Playgroud)

我看了一下java字节码.它如下.

// ================MainKt.class =================
// class version 50.0 (50)
// access flags 0x31
public final class MainKt {


  // access flags 0x19
  public final static new()Ljava/lang/String;
  @Lorg/jetbrains/annotations/NotNull;() // invisible
   L0
    LINENUMBER 2 L0
    LDC "just returns some string"
    ARETURN
   L1
    MAXSTACK = 1
    MAXLOCALS = 0 …
Run Code Online (Sandbox Code Playgroud)

kotlin kotlin-interop

21
推荐指数
3
解决办法
1819
查看次数

Kotlin扩展函数访问Java私有字段

我想在使用Kotlin 扩展功能时访问Java的私有字段.

假设我有一个JavaABC.ABC只有一个私人领域mPrivateField.我想在Kotlin中编写一个扩展函数,无论出于何种原因使用该字段.

public class ABC {
    private int mPrivateField;

}
Run Code Online (Sandbox Code Playgroud)

科特林功能是:

private fun ABC.testExtFunc() {
    val canIAccess = this.mPrivateField;
}
Run Code Online (Sandbox Code Playgroud)

我得到的错误是:

Cannot access 'mPrivateField': It is private in 'ABC'

有什么办法解决这个限制?

kotlin kotlin-extension kotlin-interop

20
推荐指数
3
解决办法
9478
查看次数

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

我想使用@OneOf注释package io.dropwizard.validation;

Java用法:

@OneOf(value = {"m", "f"})
Run Code Online (Sandbox Code Playgroud)

Kotlin用法:???

我试过这个:

 @OneOf(value = arrayOf("m", "f"))
Run Code Online (Sandbox Code Playgroud)

还有这个:

 @OneOf(value = ["m", "f"])
Run Code Online (Sandbox Code Playgroud)

我得到的是:

类型推断失败.预期的类型不匹配:

必需:字符串

发现: Array<String>

Kotlin版本:1.1.2-2

kotlin kotlin-interop

19
推荐指数
3
解决办法
4718
查看次数

是否可以使用Kotlin构建完整的Node.js Web应用程序?

如果我理解正确,随着Kotlin 1.1的发布,我们可以将JavaScript设置为编译目标,以便完全编译到Kotlin项目的JavaScript.是否可以(或可行)使用Kotlin代码编写整个Node.js应用程序,例如快速网络服务器?

正如这个问题所示,我们可以将Node模块导入Kotlin类:

external fun require(module: String): dynamic

val express = require('express')
Run Code Online (Sandbox Code Playgroud)

...似乎我可以使用以下方法创建应用程序:

val app = express()
Run Code Online (Sandbox Code Playgroud)

这是Kotlin建立快递申请的方式吗?或者我应该按照文档中的描述声明一个类:

@JsModule("express")
external class Express { ... }
Run Code Online (Sandbox Code Playgroud)

为Node.js应用程序开发设置Kotlin项目的规范方法是什么?Kotlin的JavaScript互操作性是否足够强大,可以继续沿着这条路走下去,还是会比它的价值更麻烦?

javascript node.js express kotlin kotlin-interop

19
推荐指数
1
解决办法
1045
查看次数

表达时不允许分配?

在Java中,我们通常可以在while条件内执行赋值.然而Kotlin抱怨它.所以下面的代码不能编译:

val br = BufferedReader(InputStreamReader(
        conn.inputStream))

var output: String
println("Output from Server .... \n")
while ((output = br.readLine()) != null) { // <--- error here: Assignments are not expressions, and only expressions are allowed in this context
    println(output)
}
Run Code Online (Sandbox Code Playgroud)

根据这个其他线程,这似乎是最好的解决方案:

val reader = BufferedReader(reader)
var line: String? = null;
while ({ line = reader.readLine(); line }() != null) { // <--- The IDE asks me to replace this line for while(true), what the...?
  System.out.println(line);
}
Run Code Online (Sandbox Code Playgroud)

但是吗?

kotlin kotlin-interop

17
推荐指数
3
解决办法
5305
查看次数

使用Java中的类委派调用Kotlin对象作为静态方法

这可能有点难以描述,因此我将尝试给出我正在尝试做的具体示例.

假设我们有一个Facade接口和类(在Java中),如下所示:

interface FacadeInterface<T> {
    void method(String from, String via);
}

class Facade<T> implements FacadeInterface<T> {
    private Class<T> mClazz;

    public Facade(Class<T> clazz) {
        mClazz = clazz;
    }

    @Override
    public void method(String from, String via) {
        System.out.println("Method called from " + from + " via " + via);
    }
}
Run Code Online (Sandbox Code Playgroud)

在我的应用程序中,我需要有多个单例来保存外观的实例.真正的外观有额外的设置/配置参数,但这些与此无关.

在我开始使用kotlin之前,我会有一个类,它包含一个静态的外观实例(不是真正的单例,但在我的情况下,它起到了类似的作用)代理了对外观的调用,如下所示:

public class Singleton {
    private static final FacadeInterface<String> sFacade = new Facade<>(String.class);

    private Singleton() {
    }

    public static void method(String from, String via) {
        sFacade.method(from, via);
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,有了Kotlin,我们有类代表,允许我写这样的东西: …

java delegates kotlin kotlin-interop

17
推荐指数
1
解决办法
1062
查看次数