如何将我的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)
如何在Kotlin建造一个拥有私人吸气剂(或者只是没有它)但拥有公共二传手的物业?
var status
private get
Run Code Online (Sandbox Code Playgroud)
不适用于错误: Getter visibility must be the same as property visibility
在我的情况下,原因是Java互操作:我希望我的Java代码能够调用setStatus但不能getStatus.
如果我有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?
由于Kotlin没有基元,如何实现这个接口呢?
public interface A {
@NotNull Object get(@NotNull Integer i);
@NotNull Object get(int i);
}
Run Code Online (Sandbox Code Playgroud)
我无法更改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 扩展功能时访问Java的私有字段.
假设我有一个Java类ABC.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'
有什么办法解决这个限制?
我想使用@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 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互操作性是否足够强大,可以继续沿着这条路走下去,还是会比它的价值更麻烦?
在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)
但是吗?
这可能有点难以描述,因此我将尝试给出我正在尝试做的具体示例.
假设我们有一个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,我们有类代表,允许我写这样的东西: …
kotlin ×10
kotlin-interop ×10
java ×5
delegates ×1
express ×1
interop ×1
javascript ×1
node.js ×1