自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

如何將Jython類型轉(zhuǎn)換為Java類型

開發(fā) 后端
有時會需要在 Jython 中創(chuàng)建純 Java 對象,便需要將Jython類型轉(zhuǎn)換。本文講述了如何轉(zhuǎn)換Jython類型到Java類型的方法。

Jython類型映射 Java類型

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

  1. def mapMapFromJava (map):     
  2.     """ Convert a Map to a Dictionary. """    
  3.     result = {}     
  4.     iter = map.keySet().iterator()     
  5.     while iter.hasNext():     
  6.         key = iter.next()     
  7.         result[mapFromJava(key)] = mapFromJava(map.get(key))     
  8.     return result     
  9.     
  10. def mapCollectionFromJava (coll):     
  11.     """ Convert a Collection to a List. """    
  12.     result = []     
  13.     iter = coll.iterator();     
  14.     while iter.hasNext():     
  15.         result.append(mapFromJava(iter.next()))     
  16.     return result     
  17.     
  18. def mapFromJava (object):     
  19.     """ Convert a Java type to a Jython type. """    
  20.     if object is Nonereturn object     
  21.     if   isinstance(object, util.Map):             
  22.         result = mapMapFromJava(object)     
  23.     elif isinstance(object, util.Collection):      
  24.         result = mapCollectionFromJava(object)     
  25.     else:                                          
  26.         result = object     
  27.     return result     
  28.     
  29. def mapSeqToJava (seq):     
  30.     """ Convert a sequence to a Java ArrayList. """    
  31.     result = util.ArrayList(len(seq))     
  32.     for e in seq:     
  33.         result.add(mapToJava(e));     
  34.     return result     
  35.     
  36. def mapDictToJava (dict):     
  37.     """ Convert a Dictionary to a Java HashMap. """    
  38.     result = util.HashMap()     
  39.     for key, value in dict.items():     
  40.         result.put(mapToJava(key), mapToJava(value))     
  41.     return result     
  42.     
  43. def mapToJava (object):     
  44.     """ 將Jython類型轉(zhuǎn)換為Java類型 """    
  45.     if object is Nonereturn object     
  46.     t = type(object)     
  47.     if   t == TupleType or t == ListType:       
  48.         result = mapSeqToJava(object)     
  49.     elif t == DictType:       
  50.         result = mapDictToJava(object)     
  51.     else:                     
  52.         result = object     
  53.     return result     

在使用了 mapToJava 后,這些類型可以寫為java.io.ObjectOutputStream。從 java.io.ObjectInputStream 讀出一個對象后,可以用 mapFromJava 將對象轉(zhuǎn)換回 Jython 類型。

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

映射Java類型

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

  1. data = (1,2,3, [1,2,3], [c for c in "Hello!"], "Hello!", {1:'one'2:'two'})  
  2. print "data:", data  
  3. toJava = mapToJava(data)  
  4. print "toJava:", toJava  
  5. fromJava = mapFromJava(toJava)  
  6. print "fromJava:", fromJava  
  7.  
  8. print 
  9.  
  10. print "type(%s)=%s" % ("data", type(data))  
  11. print "type(%s)=%s" % ("toJava", type(toJava))  
  12. print "type(%s)=%s" % ("fromJava", type(fromJava))  

打?。?/P>

  1. data: (123, [123], ['H''e''l''l''o''!'], 'Hello!', \  
  2. {2'two'1'one'})  
  3. toJava: [123, [123], [H, e, l, l, o, !], Hello!, {2=two, 1=one}]  
  4. fromJava: [123, [123], ['H''e''l''l''o''!'], 'Hello!', \  
  5. {2'two'1'one'}]  
  6.  
  7. type(data)=org.python.core.PyTuple  
  8. type(toJava)=org.python.core.PyJavaInstance  
  9. type(fromJava)=org.python.core.PyList  

注意 PyTuple變成了 PyJavaInstance,然后是 PyList.還要注意 toJava 表單的格式不一樣了。這是因為它是一個 Java 對象,并且它是由 Java toString() 方法而不是 Jython repr()函數(shù)打印的。Jython 將 PyJavaInstance 這種類型原樣傳遞給 Java API。 ***,注意 data 和 fromJava 值是相同的,只不過元組現(xiàn)在是一個相應的列表。

【編輯推薦】

  1. Jython訪問Java屬性文件的方法一覽
  2. 用于Jython連接Java的JavaUtils模塊
  3. Jython線程示例:定義共享緩沖區(qū)
  4. 與Java語言相比Jython開發(fā)的獨特性能
  5. 與Java相比Jython性能表現(xiàn)
責任編輯:yangsai 來源: 網(wǎng)絡
相關推薦

2023-10-16 09:26:48

CSS類型轉(zhuǎn)換

2009-06-05 11:16:58

字符串動態(tài)轉(zhuǎn)換

2020-12-17 08:08:15

CentOS

2024-02-19 15:38:08

JsonPython字符串

2017-05-25 15:14:36

2009-07-31 14:09:41

c#時間格式轉(zhuǎn)換

2024-05-30 08:40:41

大型語言模型LLM人工智能

2022-05-19 09:01:08

TypeScript元組對象

2021-12-29 16:40:54

Python語言字符串

2024-01-04 09:17:03

前端開發(fā)CSV 格式JSON 字符串

2011-04-08 10:16:13

文本文件ACCESS數(shù)據(jù)庫

2009-11-25 16:55:45

PHP函數(shù)explod

2021-04-22 07:41:46

JavaScript類型轉(zhuǎn)換

2022-05-11 17:21:05

Btrfs文件系統(tǒng)Fedora

2015-08-13 10:48:39

Java 8轉(zhuǎn)換及改進

2023-08-26 16:06:10

COBOLJava數(shù)據(jù)

2018-09-10 15:14:27

前端WebURL

2023-03-20 08:14:11

PHP類型轉(zhuǎn)換

2010-11-15 13:35:28

Oracle記錄類型

2022-10-27 20:42:04

JavaScripJava編程語言
點贊
收藏

51CTO技術(shù)棧公眾號