java怎么转换类型_如何将Jython类型转换为Java类型

Jython类型映射 Java类型

有时会需要在 Jython 中创建纯 Java 对象(例如,在需要创建跨网络发送给基于 Java 的服务器的对象、或者在需要向一个类型敏感的 Java 服务(如带有 Swing 表格单元值的服务)传递对象时)。要将 Jython类型转换为 Java类型(以及相反),使用下面例子中的函数:defmapMapFromJava (map):

""" Convert a Map to a Dictionary. """

result = {}

iter = map.keySet().iterator()

whileiter.hasNext():

key = iter.next()

result[mapFromJava(key)] = mapFromJava(map.get(key))

returnresult

defmapCollectionFromJava (coll):

""" Convert a Collection to a List. """

result = []

iter = coll.iterator();

whileiter.hasNext():

result.append(mapFromJava(iter.next()))

returnresult

defmapFromJava (object):

""" Convert a Java type to a Jython type. """

ifobjectisNone:returnobject

ifisinstance(object, util.Map):

result = mapMapFromJava(object)

elifisinstance(object, util.Collection):

result = mapCollectionFromJava(object)

else:

result = object

returnresult

defmapSeqToJava (seq):

""" Convert a sequence to a Java ArrayList. """

result = util.ArrayList(len(seq))

foreinseq:

result.add(mapToJava(e));

returnresult

defmapDictToJava (dict):

""" Convert a Dictionary to a Java HashMap. """

result = util.HashMap()

forkey, valueindict.items():

result.put(mapToJava(key), mapToJava(value))

returnresult

defmapToJava (object):

""" 将Jython类型转换为Java类型 """

ifobjectisNone:returnobject

t = type(object)

ift == TupleTypeort == ListType:

result = mapSeqToJava(object)

elift == DictType:

result = mapDictToJava(object)

else:

result = object

returnresult

在使用了 mapToJava 后,这些类型可以写为java.io.ObjectOutputStream。从 java.io.ObjectInputStream 读出一个对象后,可以用 mapFromJava 将对象转换回 Jython 类型。

注意这些方法支持有限的、但是广泛使用的一组内置 Jython类型。Jython 自动转换类似值的类型,如数字和字符串。不支持用户定义的类。

映射Java类型

继续这个例子,下面显示了继续使用上一屏讨论的映射函数的情况:data = (1,2,3, [1,2,3], [cforcin"Hello!"],"Hello!", {1:'one',2:'two'})

print"data:", data

toJava = mapToJava(data)

print"toJava:", toJava

fromJava = mapFromJava(toJava)

print"fromJava:", fromJava

print

print"type(%s)=%s"% ("data", type(data))

print"type(%s)=%s"% ("toJava", type(toJava))

print"type(%s)=%s"% ("fromJava", type(fromJava))

打印:data: (1,2,3, [1,2,3], ['H','e','l','l','o','!'],'Hello!', \

{2:'two',1:'one'})

toJava: [1,2,3, [1,2,3], [H, e, l, l, o, !], Hello!, {2=two,1=one}]

fromJava: [1,2,3, [1,2,3], ['H','e','l','l','o','!'],'Hello!', \

{2:'two',1:'one'}]

type(data)=org.python.core.PyTuple

type(toJava)=org.python.core.PyJavaInstance

type(fromJava)=org.python.core.PyList

注意 PyTuple变成了 PyJavaInstance,然后是 PyList.还要注意 toJava 表单的格式不一样了。这是因为它是一个 Java 对象,并且它是由 Java toString() 方法而不是 Jython repr()函数打印的。Jython 将 PyJavaInstance 这种类型原样传递给 Java API。 ***,注意 data 和 fromJava 值是相同的,只不过元组现在是一个相应的列表。

【编辑推荐】

【责任编辑:杨赛 TEL:(010)68476606】

点赞 0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值