Перейти к содержанию

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