溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

怎么把Jython類型轉(zhuǎn)換為Java類型

發(fā)布時間:2021-07-14 16:23:26 來源:億速云 閱讀:161 作者:chen 欄目:編程語言

這篇文章主要介紹“怎么把Jython類型轉(zhuǎn)換為Java類型”,在日常操作中,相信很多人在怎么把Jython類型轉(zhuǎn)換為Java類型問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”怎么把Jython類型轉(zhuǎn)換為Java類型”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

Jython類型映射 Java類型

有時會需要在 Jython 中創(chuàng)建純 Java 對象(例如,在需要創(chuàng)建跨網(wǎng)絡(luò)發(fā)送給基于 Java 的服務(wù)器的對象、或者在需要向一個類型敏感的 Java 服務(wù)(如帶有 Swing 表格單元值的服務(wù))傳遞對象時)。要將 Jython類型轉(zhuǎn)換為 Java類型(以及相反),使用下面例子中的函數(shù):

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類型轉(zhuǎn)換為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 將對象轉(zhuǎn)換回 Jython 類型。

注意這些方法支持有限的、但是廣泛使用的一組內(nèi)置 Jython類型。Jython 自動轉(zhuǎn)換類似值的類型,如數(shù)字和字符串。不支持用戶定義的類。

映射Java類型

繼續(xù)這個例子,下面顯示了繼續(xù)使用上一屏討論的映射函數(shù)的情況:

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

打?。?/p>

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()函數(shù)打印的。Jython 將 PyJavaInstance 這種類型原樣傳遞給 Java API。 ***,注意 data 和 fromJava 值是相同的,只不過元組現(xiàn)在是一個相應(yīng)的列表。

到此,關(guān)于“怎么把Jython類型轉(zhuǎn)換為Java類型”的學習就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續(xù)學習更多相關(guān)知識,請繼續(xù)關(guān)注億速云網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI