XStream學習筆記三

2021-08-30 08:09:24 字數 3372 閱讀 7514

本篇主要講解xstream的converter

簡單的converter

先建立乙個簡單的pojo類

public class person 

private string name;

public string getname()

public void setname(string name)

}

建立乙個person的converter

public class personconverter implements converter 

@override

public object unmarshal(hierarchicalstreamreader reader,

unmarshallingcontext content)

@override

public boolean canconvert(class calzz)

}

測試person的converter

public class persontest 

}

如果乙個只有乙個string型別的屬性,我們可以用abstractsinglevalueconverter

public class personsinglevalueconverter extends abstractsinglevalueconverter 

@override

public object fromstring(string str)

}

以上注意方法注意的一點是得重寫person的tostring方法

@override

public string tostring()

2.date的converter

public class dateconverter implements converter 

public boolean canconvert(class clazz)

public void marshal(object value, hierarchicalstreamwriter writer,

marshallingcontext context)

public object unmarshal(hierarchicalstreamreader reader,

unmarshallingcontext context) catch (parseexception e)

return calendar;

}}

注意:

1.dateformat 的實現有些事非執行緒安全的,因此不能把它作為converter的成員變數

2.calendar.class.isassignablefrom(clazz);

isassignablefrom: 判定此class物件所表示的類或介面與指定的class引數所表示的類或介面是否相同,或是否是其超類或超介面。

public class datetest 

}

3.complex converter複雜的轉換器

public class birthday 

public void setperson(person person)

public calendar getdate()

public void setdate(calendar date)

public char getgender()

public void setgendermale()

public void setgenderfemale()

}

birthday的converter

public class birthdayconverter implements converter 

public void marshal(object value, hierarchicalstreamwriter writer,

marshallingcontext context)

if (birthday.getperson() != null)

if (birthday.getdate() != null)

} public object unmarshal(hierarchicalstreamreader reader,

unmarshallingcontext context) else if (gender.charat(0)== 'm') else

} else

}while (reader.hasmorechildren()) else if ("birth".equals(reader.getnodename()))

reader.moveup();

}return birthday;

}}

看到了沒,在有些屬性為null時,丟擲了自定義的異常,如果能保證所有的屬性都是非空的,可以用下面的方式實現converter

public class birthdayconverter2 implements converter 

public void marshal(object value, hierarchicalstreamwriter writer,

marshallingcontext context)

public object unmarshal(hierarchicalstreamreader reader,

unmarshallingcontext context) else

reader.movedown();

person person = (person)context.convertanother(birthday, person.class);

birthday.setperson(person);

reader.moveup();

reader.movedown();

calendar date = (calendar)context.convertanother(birthday, calendar.class);

birthday.setdate(date);

reader.moveup();

return birthday;

}}

birthday的測試類

public class birthdaytest 

}

學習筆記 三

在經過不斷的失敗後,山寨qq專案已基本完成 登入介面 主介面 聊天介面比較簡陋。就不展示了。目前,並沒有資料庫相關的操作,不是因為不會連線資料庫進行增刪改查。是我沒想好這個資料庫具體怎麼搭建。所以在以後的學習中,會慢慢完善這個專案。實現的主要功能 1.使用者輸入賬號密碼,在伺服器驗證,登入 2.和好...

學習筆記三

1.database 2.用於儲存和管理資料的倉庫。3.資料庫的特點 1.持久化儲存資料的。2.方便儲存和管理資料。3.使用統一的方式運算元據庫。sql 4.常見的資料庫軟體1.運算元據庫 crud 1.c create 建立 create database 資料名 2.r retrieve 查詢 ...

深度學習 學習筆記三

1.回歸和分類都是有監督學習問題嘛?分類與回歸,這兩者都屬於監督學習的範疇,都是學習的方法。之所以會去兩個不同的名字,就是因為其對應的輸出值形式不同,僅此而已。對於回歸任務其輸出值是連續的實數值,而對於分類任務其輸出值為離散的類別數。因此這兩者的本質是一樣的,僅僅是輸出形式不同而已。當然由於其輸出形...