在扩展抽象类时将泛型枚举类型指定为类型

时间:2015-04-26 16:19:23

标签: java generics enums

我有以下情况

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;
    }
}

我有许多类,如下面的不同类型(日期,字符串,整数等)。

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;
    }
}

我需要编写另一个可以将Enumerations作为类型而不是Date,Integer,String等处理的类,但是我尝试的所有内容都会导致编译错误。

例如说我有以下枚举

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不在其范围内必须实现Comparable,即使我已经在类中实现了compareTo。

1 个答案:

答案 0 :(得分:0)

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

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枚举设置一个特定的类。