在 Nashorn 中使用 JavaScript 中的 Java 物件

可以將 Java 物件傳遞給 Nashorn 引擎,以便在 Java 程式碼中進行處理。同時,有一些 JavaScript(和 Nashorn)特定的結構,並不總是清楚它們如何使用 java 物件。

下面是一個表,它描述了 JavaScript 構造中本機 Java 物件的行為。

經過測試的結構:

  1. if 子句中的表示式。在 JS 中,if 子句中的表示式不必像 Java 那樣是布林值。對於所謂的假值(null,undefined,0,空字串等),它被評估為 false
  2. 對於每個語句,Nashorn 都有一種特殊的迴圈 - 每個迴圈 - 可以迭代不同的 JS 和 Java 物件。
  3. 獲取物件大小。在 JS 中,物件具有屬性長度,該屬性長度返回陣列或字串的大小。

結果:

型別 If for each length
Java null false 沒有迭代 例外
Java empty string false 沒有迭代 0
Java string true 迭代字串字元 字串的長度
Java Integer/Long 值 != 0 沒有迭代 未定義
Java ArrayList true 迭代元素 列表的長度
Java HashMap true 迭代值 空值
Java HashSet true 迭代物品 未定義

Recommendatons:

  • 建議使用 if (some_string) 檢查字串是否為空且不為空
  • for each 可以安全地用於迭代任何集合,如果集合不可迭代,null 或未定義,它不會引發異常
  • 在獲取物件的長度之前,必須檢查 null 或 undefined(對於任何呼叫方法或獲取 Java 物件屬性的嘗試都是如此)