您好,登錄后才能下訂單哦!
這篇文章主要介紹“怎么把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類型”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。