日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java开源项目EZMorph简介

發布時間:2024/4/17 java 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java开源项目EZMorph简介 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

http://hi.baidu.com/glfbin/blog/item/1302747e8722852e0cd7daaf.html

Java開源項目EZMorph簡介

2011-04-30 9:40

EZMorph是一個簡單的java類庫用于將一種對象轉換成另外一種對象。EZMorph原先是Json-lib項目中的轉換器。EZMorph 支持原始數據類型(Primitive),對象(Object),多維護數組轉換與DynaBeans的轉換。兼容JDK1.3.1,整個類庫大小只有 76K左右。

官方網站:http://ezmorph.sourceforge.net/

眾所周知,在java中對象之間的賦值是地址引用關系,如:

A a = new A();
A b = a;
則修改b的屬性,a的屬性也會跟著修改。

?????? 在很多場合下,我們希望克隆出一個新的對象出來,新對象的修改不會影響原有對象,這時我們一般常用的有如下兩種方式:

使對象實現Cloneable接口,這個只適用于我們自己的java對象
使用jakatar commons的BeanUtils實現bean copy
???? 昨晚看到一個新的組件:EZMorph,可以實現同樣的功能,這里簡單介紹一下。

????? EZMorph據說起源于json,后來獨立出來了,有興趣的可以到官網(http://ezmorph.sourceforge.net/)上瀏覽一下。

EZMorph的主要原理

??? 若要將A的屬性賦給B,則經過如下步驟:

new一個B的實例
遍歷A的屬性
若A有某個屬性P1,B也有一個屬性P1,則將A的P1的屬性值賦給B的P1
代碼示例

1. 先看幾個簡單類型的示例

??????? int i = new IntMorpher().morph("123");
??????? Assert.assertEquals(123, i); // true!

??????? String str = (String) StringMorpher.getInstance().morph(new Integer(123));
??????? Assert.assertEquals("123", str); // true!

??????? Boolean[] bools = (Boolean[]) new ObjectArrayMorpher(new BooleanObjectMorpher()).morph(new String[] { "true", "false" });
??????? Assert.assertEquals(Boolean.TRUE, bools[0]); // true!
??????? Assert.assertEquals(Boolean.FALSE, bools[1]); // true!
????????
??????? MorpherRegistry morperRegistry = new MorpherRegistry();???
??????? MorphUtils.registerStandardMorphers(morperRegistry);???
??????? Integer x = (Integer) morperRegistry.morph( Integer.class, "2" );???
??????? Assert.assertEquals( new Integer(2), x); //true!
2. 再看一下java.util.Calendar對象

??????? Calendar dynaBean = Calendar.getInstance();
??????? System.out.println(dynaBean.getTime());
??????? morperRegistry.registerMorpher( new BeanMorpher( GregorianCalendar.class, morperRegistry ) );???
??????? Calendar myBean = (Calendar) morperRegistry.morph( GregorianCalendar.class, dynaBean );
????????
??????? myBean.add(Calendar.DATE, 1);
??????? System.out.println(dynaBean.getTime());
??????? System.out.println(myBean.getTime());
注意: morperRegistry.registerMorpher( new BeanMorpher( GregorianCalendar.class, morperRegistry ) );??

這里必須填寫GregorianCalendar類型,如果用Calendar.class就會報出異常,因為EZMorph只能處理public 類型的構造方法,而Calendar的構造方法是protected的。這種情況下,最好還是使用Calendar的clone功能。

3. 再看一下,不同對象之間的賦值

Student類

public class Student {
??? private int age;
??? private String name;
??? public int getAge() {
??????? return age;
??? }
??? public void setAge(int age) {
??????? this.age = age;
??? }
??? public String getName() {
??????? return name;
??? }
??? public void setName(String name) {
??????? this.name = name;
??? }
????
}
Tearcher

public class Teacher {
??? private String id;
??? private String name;
??? public String getId() {
??????? return id;
??? }
??? public void setId(String id) {
??????? this.id = id;
??? }
??? public String getName() {
??????? return name;
??? }
??? public void setName(String name) {
??????? this.name = name;
??? }
}

將Student對象的name屬性賦給Teacher對象的name中

??????? Student student = new Student();
??????? student.setName("chb");
??????? morperRegistry.registerMorpher( new BeanMorpher(Teacher.class, morperRegistry ) );???
??????? Teacher teacher = (Teacher) morperRegistry.morph( Teacher.class, student );
??????? System.out.println(teacher.getId());
??????? System.out.println(teacher.getName());
總結:對于Bean的copy功能還是不錯的,特別是在多線程情況下的應用


?

總結

以上是生活随笔為你收集整理的Java开源项目EZMorph简介的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。