这是我使用'java'模块在node.js中创建java对象的代码片段。创建了四个java对象,我希望它们一起作为单个对象。所以我使用变量'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);
这是我得到的输出。
vehId:922
lattitude:8.6717136
经度76.8168311时间: java.util.GregorianCalendar中[时间= ?, areFieldsSet =假,areAllFieldsSet =假,宽大=真,区= sun.util.calendar.ZoneInfo [ID = “亚洲/加尔各答”,偏移= 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'变量没有赋值'time'值?为什么显示为{} ???
答案 0 :(得分:1)
一旦转换为JavaScritp对象,GregorianCalendar对象的结构就不明显了。
但它在你的第一个日志中工作的原因是,在这种情况下你将它连接到一个字符串,所以你实际上是在格里高利历中触发toString方法,这似乎使用了Java的实现方法。
换句话说,如果你做了其中任何一个:
console.log('' + time);
console.log(time.toString());
console.log("%s", time);
您将获得预期的输出字符串。
另一方面,console.log(time)
不会调用对象的toString方法,而是尝试检索哈希对象中的所有键。看起来GregorianCalendar对象没有任何可见的可枚举属性,这就是为什么你得到一个空结果。
console.log("%j", time);