将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);