从Java调用带有密封类的参数的Kotlin函数

Kus*_*hal 2 java kotlin sealed-class

我的Kotlin类TimeUtils有一个密封的类,声明为:

sealed class TimeUnit {
    object Second : TimeUnit()
    object Minute : TimeUnit()

fun setTimeOut(timeout : TimeUnit) {
    // TODO something
}
Run Code Online (Sandbox Code Playgroud)

我的Java类正在调用如下setTimeOut方法:

TimeUtils obj = new TimeUtils();
if (some condition) {
    obj.setTimeOut(TimeUtils.TimeUnit.Minute);   // ERROR
} else if (some other condition) {
    obj.setTimeOut(TimeUtils.TimeUnit.Second);   // ERROR
}
Run Code Online (Sandbox Code Playgroud)

我在上面两行指出错误expression required。谁能帮助我解决该问题?

jay*_*917 6

您应该按以下方式调用该函数:

obj.setTimeOut(TimeUtils.TimeUnit.Minute.INSTANCE);
Run Code Online (Sandbox Code Playgroud)

这是因为object Minute将被编译为以下Java代码:

public final class Minute {
   public static final Minute INSTANCE;

   private Minute() {
   }

   static {
      Minute var0 = new Minute();
      INSTANCE = var0;
   }
}
Run Code Online (Sandbox Code Playgroud)