簡體   English   中英

如何將 ormlite 中的 enum const 保留為接口類型?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM