Vì new
không phải là từ khóa trong kotlin, tôi có thể có chức năng sau trong kotlin.Gọi hàm kotlin là từ khóa trong java từ java?
fun new(): String {
return "just returns some string"
}
Nhưng tôi không thể gọi chức năng này từ java vì new
là từ khóa trong java. Tôi muốn biết nếu có một số bí danh cho chức năng này trong lĩnh vực java. Tôi không tìm thấy bất kỳ gợi ý intellij nào có thể là một bí danh có thể có cho chức năng này.
Sửa 1:
Tôi đã viết đoạn mã sau vào Kotlin:
fun new(): String {
return "just returns some string"
}
fun main(args:Array<String>){
new()
}
Và tôi đã có một cái nhìn tại các bytecode java. Nó như sau.
// ================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
// access flags 0x19
public final static main([Ljava/lang/String;)V
@Lorg/jetbrains/annotations/NotNull;() // invisible, parameter 0
L0
ALOAD 0
LDC "args"
INVOKESTATIC kotlin/jvm/internal/Intrinsics.checkParameterIsNotNull (Ljava/lang/Object;Ljava/lang/String;)V
L1
LINENUMBER 6 L1
INVOKESTATIC MainKt.new()Ljava/lang/String;
POP
L2
LINENUMBER 7 L2
RETURN
L3
LOCALVARIABLE args [Ljava/lang/String; L0 L3 0
MAXSTACK = 2
MAXLOCALS = 1
@Lkotlin/Metadata;(mv={1, 1, 6}, bv={1, 0, 1}, k=2, d1={"\u0000\u0014\n\u0000\n\u0002\u0010\u0002\n\u0000\n\u0002\u0010\u0011\n\u0002\u0010\u000e\n\u0002\u0008\u0003\u001a\u0019\u0010\u0000\u001a\u00020\u00012\u000c\u0010\u0002\u001a\u0008\u0012\u0004\u0012\u00020\u00040\u0003\u00a2\u0006\u0002\u0010\u0005\u001a\u0006\u0010\u0006\u001a\u00020\u0004\u00a8\u0006\u0007"}, d2={"main", "", "args", "", "", "([Ljava/lang/String;)V", "new", "production sources for module Srinivas"})
// compiled from: Main.kt
}
// ================META-INF/production sources for module Srinivas.kotlin_module =================
MainKt
Và đây là bytecode decompiled để java:
import kotlin.Metadata;
import kotlin.jvm.internal.Intrinsics;
import org.jetbrains.annotations.NotNull;
@Metadata(
mv = {1, 1, 6},
bv = {1, 0, 1},
k = 2,
d1 = {"\u0000\u0014\n\u0000\n\u0002\u0010\u0002\n\u0000\n\u0002\u0010\u0011\n\u0002\u0010\u000e\n\u0002\b\u0003\u001a\u0019\u0010\u0000\u001a\u00020\u00012\f\u0010\u0002\u001a\b\u0012\u0004\u0012\u00020\u00040\u0003¢\u0006\u0002\u0010\u0005\u001a\u0006\u0010\u0006\u001a\u00020\u0004¨\u0006\u0007"},
d2 = {"main", "", "args", "", "", "([Ljava/lang/String;)V", "new", "production sources for module Srinivas"}
)
public final class MainKt {
@NotNull
public static final String new() {
return "just returns some string";
}
public static final void main(@NotNull String[] args) {
Intrinsics.checkParameterIsNotNull(args, "args");
new();
}
}
Dường như viết một hàm có tên mới là một bytecode java hợp lệ. Nhưng javac
không cho phép tôi biên dịch mã. Có một số chú thích hoặc biên dịch cờ tôi có thể kích hoạt để có được javac
để biên dịch các tập tin java với các cuộc gọi đến chức năng này.
Nếu bạn không sở hữu nguồn Kotlin trong câu hỏi, phản ánh có thể làm việc – Daenyth
Trong trường hợp đó một utility.kt với bí danh như đã đề cập trong câu trả lời pelochos sẽ làm việc . Xem dưới dạng phản chiếu sẽ chậm hơn – Srin
Ý tưởng liên quan: https://stackoverflow.com/questions/30491035/can-java-class-files-use-reserved-keywords-as-names – Nayuki