如何将枚举常量保留在 ormlite 中作为接口类型?



我有一个枚举,它实现了一个接口。此接口的目的只是在多个枚举之间创建一个绑定,以便我以后可以实现插件系统。(这篇文章可能会澄清一点。

我的库枚举像这样:

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
}

问题是我想将其存储为接口,以启用一种枚举继承,因为我即将创建一个插件系统。任何开发人员只需实现这个独特的接口即可在游戏中添加资源。但我不知道他(或她(会如何命名它(可能会有一些替身(。

我有一个带有关联字段的类,如下所示:

@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中已经存在的类型(Date&DateTime(。

我怎样才能做到这一点?或者这甚至可能吗?如果没有,无论如何都可以做我想做的事(在数据库中存储未知的 const 枚举字段(?

我已经阅读了一点文档,它说要创建 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)

通常,您需要重写其他几种方法来调整自定义持久化器的行为。

最新更新