Skip to content

从导入开始

标签
Pouvoir
字数
723 字
阅读时间
4 分钟

导入(获取类对象)

在编写 js 脚本时,会有许多不便之处,例如非常冗长的类名,如果需要使用的话要写下完整包名,

为了缓解这种不便,Pouvoir 1.4 提供了顶级成员 staticfind 供脚本编写者使用

static

static是一个顶级函数,你可以直接在脚本中调用以获取静态类对象

它只有一个参数——类名

Pouvoir在启用时会初始化一个HashMap,里面存放着每个类名与其类对象的键-值对

static正是在此HashMap中通过类名获取到静态类对象,因此性能很高

如果类名不存在,会返还 null

使用

javascript
//static是一个顶级函数,可以通过类的SimpleName(类名)来快速获取静态类对象
var Coere = static("Coere");
function isNum(numStr) {
  return Coere.asDouble(numStr).isPresent; //是否是数字
}

当有重复类名时,我们一般使用find

find

find是一个顶级函数,你可以直接在脚本中调用以获取静态类对象

它只有一个参数——类的完整路径

find是通过常规方法forClass来获取静态类的.

如果类不存在,后台会给予提示

使用

javascript
var Coere = find("com.pouvoir.taboolib.common5.Coere");
function isNum(numStr) {
  return Coere.asDouble(numStr).isPresent; //是否是数字
}

你可以通过">"来缩短TabooLib类路径的方法

javascript
var Coere = find(">taboolib.common5.Coere");
function isNum(numStr) {
  return Coere.asDouble(numStr).isPresent; //是否是数字
}

其它方式

Packages

Packages 是一个顶级属性,用来导入类/包

javascript
var Coere = Package.com.pouvoir.taboolib.common5.Coere;
function isNum(numStr) {
  return Coere.asDouble(numStr).isPresent; //是否是数字
}

java

java 一般用来导入类/包

javascript
var ArrayList = java.util.ArrayList;
function newList() {
  return new ArrayList();
}

不光是 java,只要是路径以 com, edu, java, javax, 和 org 开头的的类都支持

以上两种方法是Nashorn提供的,很直观,但是有缺点:

  • 性能低
  • 当你用java去导入一个不存在的类是,Nashorn会将它认作一个""

为了避免这些缺点,Nashorn 提供了另外一种方法——Java.type

Java.type

通过顶级属性 Java 中的 type 函数

我们可以高效地导入任何一个类,这种方法与find区别并不大

javascript
var Coere = Java.type("com.pouvoir.taboolib.common5.Coere");
function isNum(numStr) {
  return Coere.asDouble(numStr).isPresent; //是否是数字
}

但是像这样一个个导入类太繁琐了,Nashorn还提供了一位大哥

JavaImporter

通过JavaImporter,我们可以一次性快速导入多个类

javascript
//导入范围---集中一次导入--JavaImporter和with使用方法
var imports = new JavaImporter(java.io, java.lang);
with (imports) {
  var file = new File(__FILE__); //查找我在哪里?
  print("哪里: " + file.getAbsolutePath());
}

贡献者

The avatar of contributor named as Glomzzz Glomzzz
The avatar of contributor named as Glom-c Glom-c

页面历史