Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
Skins
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse

LiquidBounce Forum

  1. Home
  2. Chinese
  3. 关于Nashorn JS引擎中Java的部分用法

关于Nashorn JS引擎中Java的部分用法

Scheduled Pinned Locked Moved Chinese
4 Posts 3 Posters 505 Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • As丶OneA Offline
    As丶OneA Offline
    As丶One
    wrote on last edited by
    #1

    1、Java.type函数

    参数:

    Java类型的名称

    返回:

    表示该类型的对象(jdk.internal.dynalink.beans.StaticClass)

    说明:

    返回的对象是jdk.internal.dynalink.beans.StaticClass,你可以使用new操作符访问其构造函数,也可用直接访问其公开静态成员。

    例子:

    var System = Java.type("java.lang.System")
    System.out.println("Hello world!")
    //Hello world!
    
    var JDoubleArray = Java.type("double[]")
    var arr = new JDoubleArray(3)
    arr[0] = 0.5, arr[1] = 2.3, arr[2] = 3.14
    
    for each(i in arr) print(i)
    //0.5
    //2.3
    //3.14
    

    2、Java.from函数

    参数:

    Java数组或Collection

    返回:

    JavaScript数组

    说明:

    该函数会将Java数组或Collection转化为JavaScript数组

    例子:

    var JDoubleArray = Java.type("double[]")
    var arr = new JDoubleArray(3)
    arr[0] = 0.5, arr[1] = 2.3, arr[2] = 3.14
    
    print(arr)
    //[D@20d28811
    print(arr instanceof Array)
    //false
    
    arr = Java.from(arr)
    
    print(arr)
    //0.5,2.3,3.14
    print(arr instanceof Array)
    //true
    

    3、Java.to函数

    参数:

    1、JavaScript对象(一般为数组)

    2、Java Collection或数组类型的 名称或者StaticClass

    返回:

    表示该类型的Java Collection或数组

    说明:

    该函数会将输入的对象转化为Java Collection或数组

    例子:

    var arr = [true, false, 3.14, null, "str"]
    
    print(arr)
    //true,false,3.14,,str
    
    arr = Java.to(arr,"int[]")
    
    for each(i in arr) print(i)
    //1
    //0
    //3
    //0
    //0
    

    4、Java.extend函数

    参数:

    1、要一个或者多个父类或接口

    2、重写函数对象(可省略)

    返回:

    指定Java类(或指定接口的实现)的子类的类型对象(jdk.internal.dynalink.beans.StaticClass)

    说明:

    要重写的函数必须是可被重写(即在Java中可用@Override修饰)的函数,Java.extend可以这种形式使用

    Java.extend(ArrayList){size: function() { print("size invoked!"); }}

    但这个是Nashorn JS引擎的特性,大部分JS引擎或者编辑器无法识别这种格式,这意味着如果需要使用一些工具对JS代码进行处理(如混淆)可能会出错,建议参照以下格式使用Java.extend。

    例子:

    var ArrayList = Java.type("java.util.ArrayList")
    
    var ArrayListExtender1 = Java.extend(ArrayList,{size: function() { print("size invoked!"); }})
    var ArrayListExtender2 = Java.extend(ArrayList,{size: function() { print("size invoked!"); return 3;}})
    
    var ExtendedArrayList1 = new ArrayListExtender1()
    var ExtendedArrayList2 = new ArrayListExtender2()
    
    print(ExtendedArrayList1.size())
    //size invoked!
    //0
    
    print(ExtendedArrayList2.size())
    //size invoked!
    //3
    

    5、Java.super函数

    参数:

    子类(jdk.internal.dynalink.beans.StaticClass)

    返回:

    父类(jdk.nashorn.internal.runtime.linker.JavaSuperAdapter)

    说明:

    当给定一个使用Java.extend()或等效机制(JS to Java Adapter),Java.super返回一个对象,可用于调用该对象的超类方法。

    例子:

    var ArrayList = Java.type("java.util.ArrayList")
    var ArrayListExtender = Java.extend(ArrayList,{size: function() { return 3;}})
    var ExtendedArrayList = new ArrayListExtender()
    var ArrayL1st = Java.super(ExtendedArrayList)
    
    print(ExtendedArrayList.size())
    //3
    print(ArrayL1st.size())
    //0
    

    参考文献:

    1、Nashorn NativeJava源代码

    2、官方文档

    Konoha ScarletK 1 Reply Last reply
    0
    • Ali00035A Offline
      Ali00035A Offline
      Ali00035
      wrote on last edited by Ali00035
      #2
      This post is deleted!
      1 Reply Last reply
      0
      • As丶OneA As丶One

        1、Java.type函数

        参数:

        Java类型的名称

        返回:

        表示该类型的对象(jdk.internal.dynalink.beans.StaticClass)

        说明:

        返回的对象是jdk.internal.dynalink.beans.StaticClass,你可以使用new操作符访问其构造函数,也可用直接访问其公开静态成员。

        例子:

        var System = Java.type("java.lang.System")
        System.out.println("Hello world!")
        //Hello world!
        
        var JDoubleArray = Java.type("double[]")
        var arr = new JDoubleArray(3)
        arr[0] = 0.5, arr[1] = 2.3, arr[2] = 3.14
        
        for each(i in arr) print(i)
        //0.5
        //2.3
        //3.14
        

        2、Java.from函数

        参数:

        Java数组或Collection

        返回:

        JavaScript数组

        说明:

        该函数会将Java数组或Collection转化为JavaScript数组

        例子:

        var JDoubleArray = Java.type("double[]")
        var arr = new JDoubleArray(3)
        arr[0] = 0.5, arr[1] = 2.3, arr[2] = 3.14
        
        print(arr)
        //[D@20d28811
        print(arr instanceof Array)
        //false
        
        arr = Java.from(arr)
        
        print(arr)
        //0.5,2.3,3.14
        print(arr instanceof Array)
        //true
        

        3、Java.to函数

        参数:

        1、JavaScript对象(一般为数组)

        2、Java Collection或数组类型的 名称或者StaticClass

        返回:

        表示该类型的Java Collection或数组

        说明:

        该函数会将输入的对象转化为Java Collection或数组

        例子:

        var arr = [true, false, 3.14, null, "str"]
        
        print(arr)
        //true,false,3.14,,str
        
        arr = Java.to(arr,"int[]")
        
        for each(i in arr) print(i)
        //1
        //0
        //3
        //0
        //0
        

        4、Java.extend函数

        参数:

        1、要一个或者多个父类或接口

        2、重写函数对象(可省略)

        返回:

        指定Java类(或指定接口的实现)的子类的类型对象(jdk.internal.dynalink.beans.StaticClass)

        说明:

        要重写的函数必须是可被重写(即在Java中可用@Override修饰)的函数,Java.extend可以这种形式使用

        Java.extend(ArrayList){size: function() { print("size invoked!"); }}

        但这个是Nashorn JS引擎的特性,大部分JS引擎或者编辑器无法识别这种格式,这意味着如果需要使用一些工具对JS代码进行处理(如混淆)可能会出错,建议参照以下格式使用Java.extend。

        例子:

        var ArrayList = Java.type("java.util.ArrayList")
        
        var ArrayListExtender1 = Java.extend(ArrayList,{size: function() { print("size invoked!"); }})
        var ArrayListExtender2 = Java.extend(ArrayList,{size: function() { print("size invoked!"); return 3;}})
        
        var ExtendedArrayList1 = new ArrayListExtender1()
        var ExtendedArrayList2 = new ArrayListExtender2()
        
        print(ExtendedArrayList1.size())
        //size invoked!
        //0
        
        print(ExtendedArrayList2.size())
        //size invoked!
        //3
        

        5、Java.super函数

        参数:

        子类(jdk.internal.dynalink.beans.StaticClass)

        返回:

        父类(jdk.nashorn.internal.runtime.linker.JavaSuperAdapter)

        说明:

        当给定一个使用Java.extend()或等效机制(JS to Java Adapter),Java.super返回一个对象,可用于调用该对象的超类方法。

        例子:

        var ArrayList = Java.type("java.util.ArrayList")
        var ArrayListExtender = Java.extend(ArrayList,{size: function() { return 3;}})
        var ExtendedArrayList = new ArrayListExtender()
        var ArrayL1st = Java.super(ExtendedArrayList)
        
        print(ExtendedArrayList.size())
        //3
        print(ArrayL1st.size())
        //0
        

        参考文献:

        1、Nashorn NativeJava源代码

        2、官方文档

        Konoha ScarletK Offline
        Konoha ScarletK Offline
        Konoha Scarlet
        wrote on last edited by
        #3

        @as丶one said in 关于Nashorn JS引擎中Java的部分用法:
        Nashorn JS 里是不是所有的结尾Object({})型参数都能写到括号外面? function呢

        As丶OneA 1 Reply Last reply
        0
        • Konoha ScarletK Konoha Scarlet

          @as丶one said in 关于Nashorn JS引擎中Java的部分用法:
          Nashorn JS 里是不是所有的结尾Object({})型参数都能写到括号外面? function呢

          As丶OneA Offline
          As丶OneA Offline
          As丶One
          wrote on last edited by
          #4

          @konoha-scarlet
          不是这样的,这个只是Java.extend的特殊用法

          1 Reply Last reply
          0
          Reply
          • Reply as topic
          Log in to reply
          • Oldest to Newest
          • Newest to Oldest
          • Most Votes


          About
          • Terms of Service
          • Privacy Policy
          • Status
          • Contact Us
          Downloads
          • Releases
          • Source code
          • License
          Docs
          • Tutorials
          • CustomHUD
          • AutoSettings
          • ScriptAPI
          Community
          • Forum
          • Guilded
          • YouTube
          • Twitter
          • D.Tube
          • Login

          • Login or register to search.
          • First post
            Last post
          0
          • Categories
          • Recent
          • Tags
          • Popular
          • Users
          • Groups