7. Java-доступ и импорты¶
← Типы данных и методы · Оглавление · Далее: архивы .jobsar →
Главная особенность JOBS — прямой доступ к Java через reflection.
Java-ссылки¶
Java-класс, поле или метод указывается внутри [[ ... ]]:
[[ java.lang.System.out.println ]]("Hello from Java")
Псевдонимы через use¶
Чтобы не писать полные имена постоянно, используйте use ... as ...:
use [[ java.lang.System ]] as System
use [[ java.lang.StringBuilder ]] as StringBuilder
$builder = new StringBuilder()
$builder.append("Hello")
$builder.append(", JOBS")
System.out.println($builder.toString())
Создание Java-объектов¶
use [[ java.util.ArrayList ]] as ArrayList
$list = new ArrayList()
$list.add("one")
$list.add("two")
println $list.size()
Встроенные методы и Java methods¶
Если у базового типа есть встроенный метод с таким именем, будет вызван он. Для остальных имён интерпретатор пытается обратиться к Java-полю или Java-методу.
println "abc".To-Upper()
println "abc".charAt(0)
import¶
import подключает внешние ресурсы во время выполнения.
import "java-lib.jar"
import p"./JavaClass.java" as JavaClass
import p"./mod.jobs" as Mod
Строковый импорт ищет файл в директории текущего скрипта, в lib/ и libs/ рядом со скриптом, в ~/.jobs/lib, а также в директориях из переменной окружения JOBS_PATH.
Литерал пути p"..." проверяет конкретный путь относительно файла, где написан импорт.
Импорт .jar¶
Jar-файл добавляется в загрузчик Java-классов. Alias для jar не задаётся.
import "java-lib.jar"
use [[ com.example.Foo ]] as Foo
$foo = new Foo()
Импорт .java¶
Java-файл компилируется и загружается во время выполнения. Alias обязателен.
import p"./JavaClass.java" as JavaClass
$object = new JavaClass()
Для этого нужен JDK, потому что используется runtime-компилятор Java.
Импорт .jobs¶
JOBS-файл импортируется как модуль. Alias обязателен, обращения идут через него.
mod.jobs:
$value = 10
$_secret = 20
Build-Project() {
println "build"
}
_Clean-Cache() {
println "private"
}
main.jobs:
import p"./mod.jobs" as Mod
Mod.Build-Project()
println Mod.value
Top-level код модуля выполняется один раз на процесс. Повторный импорт того же абсолютного пути использует кэшированный модуль.
Имена, начинающиеся с _, считаются закрытыми и не экспортируются. Снаружи доступны Mod.value и Mod.Build-Project(), но не Mod._secret и не Mod._Clean-Cache().
← Типы данных и методы · Оглавление · Далее: архивы .jobsar →