[英]How to persist enum const in ormlite as a interface type?
我有一個枚舉,它實現了一個接口。 這個接口的目的只是在多個枚舉之間創建一個綁定,以便我以后可以實現一個插件系統。 (這篇文章可能會澄清一點。)
我的圖書館枚舉是這樣的:
public interface Resource extends Displayable<Resource> {
// all the methods that implements my enum
// Displayable is just an interface that I need in my game
// Just doesn't consider it, it can't interfer
}
以及實現此接口的枚舉示例:
public enum LibraryEnum implements Resource {
// static final fields
// fields and resources
// all implemented methods
}
問題是我想將它存儲為一個接口,以啟用一種枚舉 inheritance,因為我即將創建一個插件系統。 任何開發者都只需要實現這個獨特的接口來在游戲中添加資源。 但我不知道他(或她)會如何命名它(可能會有一些雙打)。
我有一個帶有相關字段的 class ,如下所示:
@DatabaseTable(tableName = "packs")
public class Pack implements Displayable<Pack> {
@DatabaseField(columnName = "id", generatedId = true)
private Long packId;
// Here it is
@DatabaseField
private Resource resource;
// Is there any annotation arguments to add ?
@DatabaseField
private int quantity;
// Some other fiels
// Then constructors and methods
}
我已經閱讀了一些文檔,它說要創建 DataPersister 接口的自定義實現。 於是我開始做,但是實現的方法太多了(20個?),不知道從哪里開始,從哪里結束。 也許這是錯誤的做法? 文檔顯示了一個示例,其中方法甚至不存在,以及 java(日期和日期時間)中已經存在的類型。
我怎樣才能做到這一點? 或者這甚至可能嗎? 如果沒有,無論如何都可以做我想做的事情(在數據庫中存儲未知的常量枚舉字段)?
我已經閱讀了一些文檔,它說要創建 DataPersister 接口的自定義實現。 於是我開始做,但是實現的方法太多了(20個?),不知道從哪里開始,從哪里結束。
首先,您應該考慮自定義持久化器上的 RTFM 。 我在ORMLite文檔上花了很多時間。
正確的做法是從 ORMLite 擴展當前實現的持久化器。 例如,如果要持久化枚舉,則可以擴展BaseEnumType
。 如果沒有持久化器工作,那么您應該擴展通用BaseDataType
。
使用BaseDataType
,您需要實現的只是:
public Object parseDefaultString(FieldType fieldType, String defaultStr);
public Object resultToSqlArg(FieldType fieldType, DatabaseResults results, int columnPos);
雖然不是必需的,但您可能還想覆蓋:
public Object sqlArgToJava(FieldType fieldType, Object sqlArg, int columnPos)
通常,您希望覆蓋其他幾個方法來調整自定義持久性的行為。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.