如何将Generic Enum作为OrmLite列

时间:2017-11-10 17:16:51

标签: java android enums ormlite

我试图通过" generifying"来尽量减少我必须做的一些工作。我的查找表。他们都将int id作为主键,但我也希望他们能够通过他们的"类型" (无论Enum值是多少)。这是抽象的LookupRecord类

public abstract class LookupRecord<T extends Enum<T>> extends DatabaseRecord {
    public static final String TYPE_FIELD_NAME = "type";

    @DatabaseField(unique = true, columnName = TYPE_FIELD_NAME)
    private T type;

    public LookupRecord(T type) {
        this.type = type;
    }

    public T getType() {
        return type;
    }
}

因此,每当我尝试为任何查找表初始化Dao时,都会出现以下错误:

java.sql.SQLException: Field FieldType:name=type,class=LookupRecord improperly configured as type com.j256.ormlite.field.types.EnumStringType@5e80d5

1 个答案:

答案 0 :(得分:0)

  

他们都将int id作为主键,但我也希望他们能够通过他们的&#34;类型&#34; (无论Enum值是多少)。

@DatabaseField(unique = true, columnName = TYPE_FIELD_NAME)
private T type;

是的,由于type erasure,这不会起作用。当ORMLite使用反射调查相关类时,它会尝试查找此字段的枚举常量。它获取的只是类型Enum,而不是子类中具体的具体Enum类。不幸的是,错误信息指出了这一点。

配置类时,它只知道它是一个枚举。它不知道哪个枚举它是如此,它无法正确配置字段或创建具有适当枚举字段的对象实例。