Почему я не могу создать объект Kotlin со стороны Java?

the_kaba спросил: 28 марта 2018 в 03:24 в: java

Я изучаю взаимодействие Котлина с java.

Я не могу найти ответ на такую ​​вещь. У меня есть объект из kotlin:

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

В декомпилированной форме он выглядит следующим образом:

public final class Test {
   public static final Test INSTANCE;   public final void main(@NotNull String[] args) {
      Intrinsics.checkParameterIsNotNull(args, "args");
   }   static {
      Test var0 = new Test();
      INSTANCE = var0;
   }
}

Вопрос: почему, когда i попробуйте создать объект, я вижу ошибку, которая имеет закрытый доступ к тесту? В декомпилированном коде нет частных конструкторов ...


2 ответа

the_kaba ответил: 28 марта 2018 в 03:35
Спасибо за ответ! Мне просто интересно, что мешает творению? Я ничего не вижу в декомпилированном коде ..
Есть решение
AutonomousApps ответил: 28 марта 2018 в 03:30

Вы не можете создавать экземпляры object. Вот как Котлин определяет синглтоны. Если вы хотите иметь возможность создавать его экземпляр, вы должны объявить его как обычный class.

Если вы действительно хотите, чтобы он был одиночным, но хотите, чтобы этот единственный экземпляр был включен на стороне Java, я полагаю, вы можете ссылаться на него как Test.INSTANCE.

AutonomousApps ответил: 28 марта 2018 в 03:39
Я не совсем уверен в технических причинах. Возможно, существует ограничение на декомпилятор, но конструктор действительно является закрытым. Что я знаю, так это то, что, если бы вы могли создавать экземпляры со стороны Java, это нарушило бы одноэлементный контракт с неприятными последствиями.
AutonomousApps ответил: 30 марта 2018 в 05:38
@the_kaba Не могли бы вы принять этот ответ?