Attention: Here be dragons

This is the latest (unstable) version of this documentation, which may document features not available in or compatible with released stable versions of Godot.

JavaClassWrapper

Наследует: Object

Предоставляет доступ к собственному интерфейсу Java.

Описание

Синглтон JavaClassWrapper предоставляет способ для приложения Godot отправлять и получать данные через Java Native Interface (JNI).

Примечание: Этот синглтон доступен только в сборках Android.

var LocalDateTime = JavaClassWrapper.wrap("java.time.LocalDateTime")
var DateTimeFormatter = JavaClassWrapper.wrap("java.time.format.DateTimeFormatter")

var datetime = LocalDateTime.now()
var formatter = DateTimeFormatter.ofPattern("dd-MM-yyyy HH:mm:ss")

print(datetime.format(formatter))

Предупреждение: При вызове методов Java обязательно проверьте get_exception(), чтобы проверить, не выдал ли метод исключение.

Обучающие материалы

Методы

JavaObject

create_proxy(object: Object, interfaces: PackedStringArray)

JavaObject

create_sam_callback(sam_interface: String, callable: Callable)

JavaObject

get_exception()

JavaClass

wrap(name: String)


Описания метода

JavaObject create_proxy(object: Object, interfaces: PackedStringArray) 🔗

Создает JavaObject, реализующий заданные интерфейсы Java, используя данный Object в качестве реализации.

object должен содержать сигнатуры методов, соответствующие сигнатурам методов из переданных Java interfaces. Вызов методов из Java interfaces будет направлен к соответствующему методу object.

class PrintProxy:
    func println(content: String) -> void:
        print(content)

var print_proxy = PrintProxy.new()
var printer_object = JavaClassWrapper.create_proxy(print_proxy, ["android.util.Printer"])
printer_object.println("Hello Godot World!")

Примечание: Этот метод работает только на Android. На всех остальных платформах этот метод всегда будет возвращать null.


JavaObject create_sam_callback(sam_interface: String, callable: Callable) 🔗

Создает объект JavaObject, реализующий интерфейс Java Single Abstract Method (SAM), используя объект Godot Callable в качестве реализации.

sam_interface должен быть интерфейсом Java SAM, то есть он должен иметь только один абстрактный метод для реализации.

callable должен обрабатывать те же типы параметров, что и метод интерфейса SAM, и должен предоставлять тот же тип возвращаемого значения. callable будет вызываться как обратный вызов, передавая аргументы из метода интерфейса Java SAM.

var cb = func (content: String) -> void:
    print(content)
var callback = JavaClassWrapper.create_sam_callback("android.util.Printer", cb)
callback.println("Hello Godot World!")

Примечание: Этот метод работает только на Android. На всех остальных платформах этот метод всегда будет возвращать null.


JavaObject get_exception() 🔗

Возвращает исключение Java из последнего вызова Java класса. Если исключения не было, то вернет null.

Примечание: Этот метод работает только на Android. На любой другой платформе этот метод всегда вернет null.


JavaClass wrap(name: String) 🔗

Оборачивает класс, определённый в Java, и возвращает его как тип JavaClass Object, с которым Godot может взаимодействовать.

При обёртке внутренних (вложенных) классов используйте $ вместо . для их разделения. Например, JavaClassWrapper.wrap("android.view.WindowManager$LayoutParams") оборачивает класс WindowManager.LayoutParams.

Примечание: Чтобы вызвать конструктор, вызовите метод с тем же именем, что и у класса. Например:

var Intent = JavaClassWrapper.wrap("android.content.Intent")
var intent = Intent.Intent()

Примечание: Этот метод работает только на Android. На всех остальных платформах он ничего не делает и возвращает пустой JavaClass.