UNPKG

autojs-create-javaarray

Version:

Autojs Pro V9的创建Java类型数组。

234 lines (205 loc) 8.27 kB
//神麤詭末,2682963017,与君共勉之。 "nodejs"; require("rhino").install(); class JavaArray { #java_types = { "boolean": "Boolean", "int": "Integer", "long": "Long", "double": "Double", "char": "Character", "byte": "Byte", "float": "Float" }; #js_types = { "string": "String", "number": "Integer", "boolean": "Boolean" } findClassOrNull(str) { return $autojs.java.findClassOrNull(str); } isInteger(n) { return parseInt(n) == parseFloat(n) } multiarrType(arr){ let types = this.#java_types; if(arr[0] instanceof Array){ return this.multiarrType(arr[0]); } if(arr[0]&&arr[0]["getClass"] && arr[0].getClass().isArray()){ if(arr[0]){ return this.multiarrType(arr[0]) } }else if(arr&&arr["getClass"]){ let Type = (arr.getClass().getComponentType()+"").replace(/class /g, ""); return Type; } if (typeof(arr[0]) == 'string') { if (types[arr[0]]) { var classz = Packages["java.lang." + types[arr[0]]].TYPE; } if (this.findClassOrNull(arr[0])) { var classz = this.findClassOrNull(arr[0]); } } if (this.#js_types[typeof(arr[0])]) { let Type = this.#js_types[typeof(arr[0])]; if (typeof(arr[0]) == "number") { Type = types[this.isInteger(arr[0]) ? "int" : "double"]; } var classz = Packages["java.lang." + Type].TYPE || Packages["java.lang." + Type]; } else if (arr[0][$autojs.java.className]) { var classz = arr[0]; } else if (arr[0].getClass()) { var classz = arr[0]; } return classz; } multiarr(arr, a=1, arr_len=[]) { if(arr instanceof Array){ if(arr_len.length == 0){ arr_len.push(arr.length); } for (let i in arr) { if (i==0 && arr[i] instanceof Array) { a++; arr = arr[i]; arr_len.push(arr.length); this.multiarr(arr, a, arr_len); } } } return arr_len; } multiarrFill(arr, javaarr){ let types = this.#java_types; if(arr instanceof Array){ for(let i in arr){ if(arr[i] instanceof Array){ this.multiarrFill(arr[i], javaarr[i]); } else { if(i <= javaarr.length-1){ if(typeof(arr[i]) == "number"){ let Type = (javaarr.getClass().getComponentType()+"").replace(/class /, ""); let classz = types[Type]?Packages["java.lang." + types[Type]]:Packages[Type]; arr[i] = new classz(arr[i]); } java.lang.reflect.Array.set(javaarr, new java.lang.Integer(i), arr[i]); } } } } return javaarr; } fromTypeAndLength(...args) { let types = this.#java_types; if (types[args[0]]) { var classz = Packages["java.lang." + types[args[0]]].TYPE; } else if (this.#js_types[typeof(args[0])]) { if (this.findClassOrNull(""+args[0])) { var classz = this.findClassOrNull(args[0]).class; } else { let Type = this.#js_types[typeof(args[0])]; if (typeof(args[0]) == "number") { Type = types[this.isInteger(args[0]) ? "int" : "double"]; } var classz = Packages["java.lang." + Type].TYPE || Packages["java.lang." + Type].class; } } else if (args[0][$autojs.java.className]) { var classz = args[0].class; } else if (args[0].getClass()) { var classz = args[0].getClass(); } if (typeof(args[1]) == 'number') { return java.lang.reflect.Array.newInstance(classz, args[1]); } if (args[1] instanceof Array){ return java.lang.reflect.Array.newInstance(classz, this.fromArray(args[1])); } return java.lang.reflect.Array.newInstance(classz, args[1]); } fromArgs(...args) { let types = this.#java_types; let multiInof = this.multiarr(args); if(multiInof.length >= 2){ var multiType = this.multiarrType(args); var multiJava = this.fromTypeAndLength(multiType, multiInof); multiJava = this.multiarrFill(args, multiJava); return multiJava; } let ClassArray = this.fromTypeAndLength(args[0], args.length); for (let i in args) { if(typeof(args[i]) == "number"){ let Type = (ClassArray.getClass().getComponentType()+"").replace(/class /, ""); let classz = types[Type]?Packages["java.lang." + types[Type]]:Packages[Type]; args[i] = new classz(args[i]); } java.lang.reflect.Array.set(ClassArray, new java.lang.Integer(i), args[i]); } return ClassArray; } fromArray(args) { let types = this.#java_types; let multiInof = this.multiarr(args); if(multiInof.length >= 2){ var multiType = this.multiarrType(args); var multiJava = this.fromTypeAndLength(multiType, multiInof); multiJava = this.multiarrFill(args, multiJava); return multiJava; } let ClassArray = this.fromTypeAndLength(args[0], args.length); for (let i in args) { if(typeof(args[i]) == "number"){ let Type = (ClassArray.getClass().getComponentType()+"").replace(/class /, ""); let classz = types[Type]?Packages["java.lang." + types[Type]]:Packages[Type]; args[i] = new classz(args[i]); } java.lang.reflect.Array.set(ClassArray, new java.lang.Integer(i), args[i]); } return ClassArray; } fromTypeAndArgs(type, ...args) { let types = this.#java_types; let multiInof = this.multiarr(args); if(multiInof.length >= 2){ var multiType = type; var multiJava = this.fromTypeAndLength(multiType, multiInof); multiJava = this.multiarrFill(args, multiJava); return multiJava; } let ClassArray = this.fromTypeAndLength(type, args.length); for (let i in args) { if(typeof(args[i]) == "number"){ let Type = (ClassArray.getClass().getComponentType()+"").replace(/class /, ""); let classz = types[Type]?Packages["java.lang." + types[Type]]:Packages[Type]; args[i] = new classz(args[i]); } java.lang.reflect.Array.set(ClassArray, new java.lang.Integer(i), args[i]); } return ClassArray; } fromTypeAndArray(type, args) { let types = this.#java_types; let multiInof = this.multiarr(args); if(multiInof.length >= 2){ var multiType = type; var multiJava = this.fromTypeAndLength(multiType, multiInof); multiJava = this.multiarrFill(args, multiJava); return multiJava; } let ClassArray = this.fromTypeAndLength(type, args.length); for (let i in args) { if(typeof(args[i]) == "number"){ let Type = (ClassArray.getClass().getComponentType()+"").replace(/class /, ""); let classz = types[Type]?Packages["java.lang." + types[Type]]:Packages[Type]; args[i] = new classz(args[i]); } java.lang.reflect.Array.set(ClassArray, new java.lang.Integer(i), args[i]); } return ClassArray; } } var $JavaArray = new JavaArray(); module.exports = $JavaArray; exports.JavaArray = JavaArray;