将java对象分配给node.jsvariables
这是我使用'java'模块在node.js中创buildjava对象的一段代码。 四个java对象被创build,我希望它们作为一个单一的对象。 所以我使用variables“args”来保存这些java对象。
var java = require("java"); java.classpath.push("commons-lang3-3.1.jar"); java.classpath.push("commons-io.jar"); var soap = require('soap'); var vehId = java.newInstanceSync("java.lang.Integer", 922); var lattitude = java.newInstanceSync("java.lang.Double", 8.6717136); var longitude = java.newInstanceSync("java.lang.Double", 76.8168311); var GregorianCalendar = java.import('java.util.GregorianCalendar'); var time = new GregorianCalendar(2014,4,29,8,7,6); console.log('vehId: '+vehId+'\nlattitude: '+lattitude+'\nlongitude '+longitude+'\ntime: '+time+'\n\n'); var args = { vehicleId : vehId, lat : lattitude, lan : longitude, packetTime: time }; console.log(args);
这是我得到的输出。
车辆:922
格:8.6717136
经度76.8168311
time:java.util.GregorianCalendar [time = ?, areFieldsSet = false,areAllFieldsSet = false,lenient = true,zone = sun.util.calendar.ZoneInfo [id =“Asia / Calcutta”,offset = 19800000,dstSavings = 0, useDaylight =假,过渡= 6,lastRule =空],Firstdayofweek可= 1,minimalDaysInFirstWeek = 1,ERA = ?, YEAR = 2014,MONTH = 4,WEEK_OF_YEAR = ?, WEEK_OF_MONTH = ?, DAY_OF_MONTH = 29,DAY_OF_YEAR = ?, DAY_OF_WEEK = ?, DAY_OF_WEEK_IN_MONTH = ?, AM_PM = 0,HOUR = 8,HOUR_OF_DAY = 8,MINUTE = 7,SECOND = 6,微差= ?, ZONE_OFFSET = ?, DST_OFFSET =?]
{vehicleId:922,
lat:8.6717136,
lan:76.8168311,
packetTime:{}
}
有人请告诉我为什么'args'对象的'packetTime'variables没有被赋予'time'值? 为什么它显示为{}?
一旦转换为JavaScritp对象,GregorianCalendar对象是如何构造的并不明显。
但是为什么它在你的第一个日志中工作的原因是,在这种情况下,你将它连接到一个string,所以你实际上触发公历日历中的toString方法,这似乎使用Java的方法的实现。
换句话说,如果你这样做了:
console.log('' + time); console.log(time.toString()); console.log("%s", time);
你会得到预期的输出string。
另一方面, console.log(time)
不会调用对象的toString方法,而是尝试检索散列对象中的所有键。 它看起来像GregorianCalendar对象没有任何可见的属性,这就是为什么你会得到一个空的结果。
console.log("%j", time);