扩展抽象时将通用枚举类型指定为类型 class

Specifying generic enum type as type when extending abstract class

我有以下情况

public interface MyCriteria<T extends Comparable<T>>{

    public T getValue();

}

public abstract class AbstractMyCriteria<T extends Comparable<T>> implements MyCriteria<T>{
    private String code;

    public AbtsractMyCriteria(String code){
        this.code=code;
    }
}

我有许多 class 类型,例如以下不同类型(日期、字符串、整数等)

public DateEqualsMyCriteria extends AbstractMyCriteria<Date>{
    private Date value;

    public DateEqualsMyCriteria(String code,Date value){
        super(code);
        this.value=value;
    }

    @Override
    public Date getValue(){
        return value;
    }
}

我需要编写另一个 class 来处理枚举类型而不是日期、整数、字符串等,但我尝试的所有操作都会导致编译错误。

例如我有以下枚举

public enum Type {
    Attribute,
    Entity
}

public enum Operation {
    Equal,
    GreaterThan,
    GreaterThanOrEqualTo,
    LessThan,
    LessThanOrEqualTo,
    NotNull,
    Null,
    Wildcard
}

我需要能够做到

EnumEqualsMyCriteria enumEqualsMyCriteria=new EnumEqualsMyCriteria("Name",Type.Entity);

如有任何建议,我们将不胜感激。

更新

我试过的是

public class AttributeEnumEqualsFlexxCriteria extends AbstractFlexxCriteria<Enum> implements Comparable<Enum>

但这给出了错误 java.land.Enum is not within it's bounds must implement Comparable 即使我已经在 class.

中实现了 compareTo

这会编译并执行您想要的操作,我认为:

public class EnumEqualsMyCriteria<T extends Enum<T>> extends AbstractMyCriteria<T>{
private T value;



public EnumEqualsMyCriteria(String code,T value) {
    super(code);
    this.value=value;
}


@Override
public T getValue() {
    return value; 
}

public static void main(String[] args) {
    EnumEqualsMyCriteria<Type> ec=new EnumEqualsMyCriteria<Type>("Name", Type.Entity);
}
}

如果您愿意,您当然可以为 Type 枚举指定一个特定的 class。