Since new is not a keyword in kotlin, i can have the following function in kotlin.

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

But i am unable to call this function from java since new is a keyword in java. I would like to know if there is some alias for this function in java realm. I did not find any intellij suggestions that might be a possible alias to this function.

Edit 1:

我用Kotlin 编写了以下代码:

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

fun main(args:Array<String>){
    new()
}

我看了一下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

  // 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

And here is the bytecode decompiled to 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();
   }
}

It appears that writing a function named new is a valid java bytecode. But javac is not letting me compile the code. Is there some annotation or compiler flag I can enable to get javac to compile the java file with call to this function.

推荐答案

由于您试图使用关键字,编译器将不允许您将其用作方法名

The only workaround I can think is to do something like:

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

fun notAKeyWord() = new()

So you can use WhatEverKt.notAKeyWord() from your java code

Kotlin相关问答推荐

DataSnapshot.getValue()未记录的奇怪行为

如何使用具有名称冲突的限定这个?

Kotlin:类型不匹配:推断的类型已运行,但应等待

用vararg替换列表的设计弃用警告

Kotlin stlib中是否有用于将列表<;对<;A,B&>;转换为对<;列表<;A&>,列表<;B&>;的函数

在Kotlin中的嵌套when语句中,else块是强制性的吗?

如何优雅地声明一个StateFlow?

有没有办法在 jetpack compose 中将 TextField 密码点图标增加得更大?

Eclipse:无法安装 Kotlin 插件

kotest 更改环境变量

如果不为空,则为 builder 设置一个值 - Kotlin

如何使用 Hilt 注入应用程序:ViewModel 中的上下文?

AIDL 中的 Parcelize 注释:Incompatible types: Object cannot be converted to MyCustomObject

使用最新的 com.jakewharton.rxbinding3:rxbinding:3.0.0-alpha2 库时未找到 RxTextView 和其他小部件

如何用 kotlin 打包 List

将多个 Kotlin 流合并到一个列表中,而无需等待第一个值

当被Spring代理类访问时,Kotlin实例变量为null

如果作为 RxJava Observable 提供,Kotlin 密封类子类需要强制转换为基类

使用 java lambda 调用 kotlin 函数时,Kotlin 无法访问 kotlin.jvm.functions.Function1

Kotlin 的数据类 == C# 的 struct ?