温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

怎么把Jython类型转换为Java类型

发布时间:2021-07-14 16:23:26 来源:亿速云 阅读:161 作者:chen 栏目:编程语言

这篇文章主要介绍“怎么把Jython类型转换为Java类型”,在日常操作中,相信很多人在怎么把Jython类型转换为Java类型问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么把Jython类型转换为Java类型”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

Jython类型映射 Java类型

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

def mapMapFromJava (map):         """ Convert a Map to a Dictionary. """        result = {}         iter = map.keySet().iterator()         while iter.hasNext():             key = iter.next()             result[mapFromJava(key)] = mapFromJava(map.get(key))         return result         def mapCollectionFromJava (coll):         """ Convert a Collection to a List. """        result = []         iter = coll.iterator();         while iter.hasNext():             result.append(mapFromJava(iter.next()))         return result         def mapFromJava (object):         """ Convert a Java type to a Jython type. """        if object is None: return object         if   isinstance(object, util.Map):                     result = mapMapFromJava(object)         elif isinstance(object, util.Collection):              result = mapCollectionFromJava(object)         else:                                                  result = object         return result         def mapSeqToJava (seq):         """ Convert a sequence to a Java ArrayList. """        result = util.ArrayList(len(seq))         for e in seq:             result.add(mapToJava(e));         return result         def mapDictToJava (dict):         """ Convert a Dictionary to a Java HashMap. """        result = util.HashMap()         for key, value in dict.items():             result.put(mapToJava(key), mapToJava(value))         return result         def mapToJava (object):         """ 将Jython类型转换为Java类型 """        if object is None: return object         t = type(object)         if   t == TupleType or t == ListType:               result = mapSeqToJava(object)         elif t == DictType:               result = mapDictToJava(object)         else:                             result = object         return result

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

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

映射Java类型

继续这个例子,下面显示了继续使用上一屏讨论的映射函数的情况:

data = (1,2,3, [1,2,3], [c for c in "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 值是相同的,只不过元组现在是一个相应的列表。

到此,关于“怎么把Jython类型转换为Java类型”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI