访问 JVM
访问 Java 类
_console.log(StringBuilder::class.java)
$console.log(StringBuilder)
let StringBuilder = $java.loadClass("java.lang.StringBuilder")
$console.log(StringBuilder)
local StringBuilder = _java:loadClass("java.lang.StringBuilder")
_console:log(StringBuilder)
<?php
// java_class 通过类名加载类
$class = java_class("java.lang.System");
$console->log($class);
StringBuilder = _java.loadClass("java.lang.StringBuilder")
_console.log(StringBuilder)
StringBuilder = java.lang.StringBuilder
$console.log(StringBuilder)
创建 Java 对象
_console.log(StringBuilder("Hello World"))
$console.log(new StringBuilder("Hello World"))
let StringBuilder = $java.loadClass("java.lang.StringBuilder")
$console.log(new StringBuilder("Hello World"))
local StringBuilder = _java:loadClass("java.lang.StringBuilder")
_console:log(StringBuilder("Hello World"))
<?php
// 通过 java(类名,构造方法参数) 创建对象
$a = java("java.util.Date", 123);
$console->log($a->time);
StringBuilder = _java.loadClass("java.lang.StringBuilder")
_console.log(StringBuilder("Hello World"))
StringBuilder = java.lang.StringBuilder
$console.log(StringBuilder.new("Hello World"))
调用 Java 对象方法
val sb = StringBuilder("Hello World")
sb.append(",kotlin!")
_console.log(sb.toString())
def sb = new StringBuilder("Hello World")
sb.append(",groovy!")
$console.log(sb.toString())
let StringBuilder = $java.loadClass("java.lang.StringBuilder")
let sb = new StringBuilder("Hello World")
sb.append(",js!")
$console.log(sb.toString())
local StringBuilder = _java:loadClass("java.lang.StringBuilder")
local sb = StringBuilder("Hello World")
sb:append(",lua!")
_console:log(sb:toString())
<?php
$sb = java("java.lang.StringBuilder", "Hello World");
$sb->append(",php!");
$console->log($sb->toString());
StringBuilder = _java.loadClass("java.lang.StringBuilder")
sb = StringBuilder("Hello World")
sb.append(",python!")
_console.log(sb.toString())
StringBuilder = java.lang.StringBuilder
sb = StringBuilder.new("Hello World")
sb.append(",ruby!")
$console.log(sb.toString())
调用 Java 对象属性
import com.m8test.script.core.impl.JavaTypeTester
_console.log(JavaTypeTester().OBJECT_FIELD)
import com.m8test.script.core.impl.JavaTypeTester
$console.log(new JavaTypeTester().OBJECT_FIELD)
let JavaTypeTester = $java.loadClass("com.m8test.script.core.impl.JavaTypeTester")
$console.log(new JavaTypeTester().OBJECT_FIELD)
local JavaTypeTester = _java:loadClass("com.m8test.script.core.impl.JavaTypeTester")
_console:log(JavaTypeTester().OBJECT_FIELD)
<?php
$a = java("com.m8test.script.core.impl.JavaTypeTester");
$console->log($a->OBJECT_FIELD);
JavaTypeTester = _java.loadClass("com.m8test.script.core.impl.JavaTypeTester")
_console.log(JavaTypeTester().OBJECT_FIELD)
java_import "com.m8test.script.core.impl.JavaTypeTester"
jtt = JavaTypeTester.new
$console.log(jtt.OBJECT_FIELD)
调用 Java 静态方法
_console.log(System.currentTimeMillis())
$console.log(System.currentTimeMillis())
let System = $java.loadClass("java.lang.System")
$console.log(System.currentTimeMillis())
local System = _java:loadClass("java.lang.System")
_console:log(System:currentTimeMillis())
<?php
// 方法二: java_class() 方法导入类后通过 -> 调用
$class = java_class("java.lang.System");
//# System.currentTimeMillis();
$console->log($class->currentTimeMillis());
$console->log($class::currentTimeMillis());
System = _java.loadClass("java.lang.System")
_console.log(System.currentTimeMillis())
System = java.lang.System
$console.log(System.currentTimeMillis())
调用 Java 静态属性
import com.m8test.script.core.impl.JavaTypeTester
_console.log(JavaTypeTester.STATIC_FIELD)
import com.m8test.script.core.impl.JavaTypeTester
$console.log(JavaTypeTester.STATIC_FIELD)
let JavaTypeTester = $java.loadClass("com.m8test.script.core.impl.JavaTypeTester")
$console.log(JavaTypeTester.STATIC_FIELD)
local JavaTypeTester = _java:loadClass("com.m8test.script.core.impl.JavaTypeTester")
_console:log(JavaTypeTester.STATIC_FIELD)
<?php
$class = java_class("java.lang.System");
# System.in 静态常量
$in = $class::in;
$console->log(gettype($in));
$JavaTypeTester = java_class("com.m8test.script.core.impl.JavaTypeTester");
// 静态变量, 反射调用
$v = $reflectors->reflect($JavaTypeTester)->getField(null, function ($f) {
$f->setName("STATIC_FIELD");
});
$console->log(gettype($v));
JavaTypeTester = _java.loadClass("com.m8test.script.core.impl.JavaTypeTester")
_console.log(JavaTypeTester.STATIC_FIELD)
java_import "com.m8test.script.core.impl.JavaTypeTester"
$console.log(JavaTypeTester.STATIC_FIELD)
java_import "android.os.Build"
$console.log(Build::BRAND)
实现 Java 非功能性接口
import com.m8test.script.core.api.console.Console
import com.m8test.script.core.impl.JavaTypeTester
class MultiAbstractMethodInterfaceImpl(private val _console: Console) :
JavaTypeTester.MultiAbstractMethodInterface {
override fun setInt(i: Int) {
_console.log("setInt $i")
}
override fun getInt(): Int {
_console.log("getInt")
return 0
}
}
JavaTypeTester.setMultiAbstractMethodInterface(MultiAbstractMethodInterfaceImpl(_console))
val mami = JavaTypeTester.getMultiAbstractMethodInterface()
mami.setInt(1234)
_console.log(mami.getInt())
import com.m8test.script.core.impl.JavaTypeTester
class MultiAbstractMethodInterfaceImpl implements JavaTypeTester.MultiAbstractMethodInterface {
def $console
@Override
void setInt(int i) {
$console.log("setInt" + i)
}
@Override
int getInt() {
$console.log("getInt")
return 0
}
}
JavaTypeTester.setMultiAbstractMethodInterface(new MultiAbstractMethodInterfaceImpl($console: $console))
def mami = JavaTypeTester.getMultiAbstractMethodInterface()
mami.setInt(1234)
$console.log(mami.getInt())
let JavaTypeTester = $java.loadClass("com.m8test.script.core.impl.JavaTypeTester")
JavaTypeTester.setMultiAbstractMethodInterface({
setInt: (i) => {
$console.log("setInt" + i)
},
getInt: () => {
$console.log("getInt")
return 0
}
})
let mami = JavaTypeTester.getMultiAbstractMethodInterface()
mami.setInt(1234)
$console.log(mami.getInt())
local JavaTypeTester = _java:loadClass("com.m8test.script.core.impl.JavaTypeTester")
JavaTypeTester:setMultiAbstractMethodInterface({
setInt = function(i)
_console:log("setInt" .. i)
end,
getInt = function()
_console:log("getInt")
return 0
end
})
local mami = JavaTypeTester:getMultiAbstractMethodInterface()
mami:setInt(1234)
_console:log(mami:getInt())
<?php
$JavaTypeTester = java_class("com.m8test.script.core.impl.JavaTypeTester");
class MultiAbstractMethodInterfaceImpl
{
var $console;
var $i;
function __construct($p)
{
$this->console = $p;
}
function setInt($i)
{
$this->i = $i;
$this->console->log("setInt", $i);
}
function getInt()
{
return $this->i;
}
}
$JavaTypeTester->setMultiAbstractMethodInterface(new MultiAbstractMethodInterfaceImpl($console));
$mami = $JavaTypeTester->getMultiAbstractMethodInterface();
$mami->setInt(12345);
$console->log($mami->getInt());
JavaTypeTester = _java.loadClass("com.m8test.script.core.impl.JavaTypeTester")
class MultiAbstractMethodInterfaceImpl():
def setInt(self, i):
_console.log("setInt " + str(i))
def getInt(self):
_console.log("getInt")
return 0
JavaTypeTester.setMultiAbstractMethodInterface(_java.proxy(MultiAbstractMethodInterfaceImpl(), [
"com.m8test.script.core.impl.JavaTypeTester$MultiAbstractMethodInterface"]))
mami = JavaTypeTester.getMultiAbstractMethodInterface()
mami.setInt(1234)
_console.log(mami.getInt())
import 'com.m8test.script.core.impl.JavaTypeTester'
import 'com.m8test.script.core.impl.JavaTypeTester$MultiAbstractMethodInterface'
class MultiAbstractMethodInterfaceImpl
include MultiAbstractMethodInterface
def setInt(i)
$console.log("setInt #{i}")
end
def getInt()
$console.log("getInt")
0
end
end
JavaTypeTester.setMultiAbstractMethodInterface(MultiAbstractMethodInterfaceImpl.new)
mami = JavaTypeTester.getMultiAbstractMethodInterface()
mami.setInt(1234)
$console.log(mami.getInt())
实现 Java 功能性接口
import com.m8test.script.core.api.console.Console
import com.m8test.script.core.impl.JavaTypeTester
class SingleAbstractMethodInterfaceImpl(private val _console: Console) :
JavaTypeTester.SingleAbstractMethodInterface {
override fun getInt(): Int {
_console.log("getInt")
return 0
}
}
JavaTypeTester.setSingleAbstractMethodInterface(SingleAbstractMethodInterfaceImpl(_console))
val sami = JavaTypeTester.getSingleAbstractMethodInterface()
_console.log(sami.getInt())
import com.m8test.script.core.impl.JavaTypeTester
class SingleAbstractMethodInterfaceImpl implements JavaTypeTester.SingleAbstractMethodInterface {
def $console
@Override
int getInt() {
$console.log("getInt")
return 0
}
}
JavaTypeTester.setSingleAbstractMethodInterface(new SingleAbstractMethodInterfaceImpl($console: $console))
def sami = JavaTypeTester.getSingleAbstractMethodInterface()
$console.log(sami.getInt())
let JavaTypeTester = $java.loadClass("com.m8test.script.core.impl.JavaTypeTester")
JavaTypeTester.setSingleAbstractMethodInterface(() => {
$console.log("getInt")
return 0
})
let sami = JavaTypeTester.getSingleAbstractMethodInterface()
$console.log(sami.getInt())
local JavaTypeTester = _java:loadClass("com.m8test.script.core.impl.JavaTypeTester")
JavaTypeTester:setSingleAbstractMethodInterface(function()
_console:log("getInt")
return 0
end)
local sami = JavaTypeTester:getSingleAbstractMethodInterface()
_console:log(sami:getInt())
<?php
$JavaTypeTester = java_class("com.m8test.script.core.impl.JavaTypeTester");
// 方法一: 通过闭包(推荐)
$JavaTypeTester->setSingleAbstractMethodInterface(function () use ($console) {
$console->log("closure");
return 1234;
});
$sami = $JavaTypeTester->getSingleAbstractMethodInterface();
$console->log($sami->getInt());
// 方法二: 通过对象
class SingleAbstractMethodInterfaceImpl
{
var $console;
function __construct($p)
{
$this->console = $p;
}
function getInt()
{
$this->console->log("getInt");
return 0;
}
}
$JavaTypeTester->setSingleAbstractMethodInterface(new SingleAbstractMethodInterfaceImpl($console));
$sami = $JavaTypeTester->getSingleAbstractMethodInterface();
$console->log($sami->getInt());
JavaTypeTester = _java.loadClass("com.m8test.script.core.impl.JavaTypeTester")
def sami():
_console.log("getInt")
return 0
JavaTypeTester.setSingleAbstractMethodInterface(sami)
s = JavaTypeTester.getSingleAbstractMethodInterface()
_console.log(s == sami)
_console.log(s())
import 'com.m8test.script.core.impl.JavaTypeTester'
JavaTypeTester.setMultiAbstractMethodInterface {
$console.log("getInt")
0
}
sami = JavaTypeTester.getMultiAbstractMethodInterface()
$console.log(sami.getInt())
Last modified: 08 August 2025