2015-04-26 79 views
0

时指定通用枚举类型为I型有以下的情况延伸抽象类

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

我需要编写另一个类,可以处理枚举作为类型而不是日期,整数,字符串等,但我尝试导致编译错误。

例如说我有以下枚举

public enum Type { 
    Attribute, 
    Entity 
} 

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

我需要能够对一些诸如

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

任何建议,将不胜感激。

UPDATE

我已经试过是

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

而是赋予它的边界内的错误java.land.Enum不是必须实现可比,即使我已经在类中实现的compareTo 。

+0

所有枚举都是Enum的子类,因此您可以将Enum作为类型参数。这有帮助吗? –

+0

嗨JP我试过,但得到了一个枚举没有约束的错误,我不知道如何解决这个问题。谢谢 –

+0

另外,你的具体类别不会做你的抽象类不能做的事情。您可以获得T类的价值。 –

回答

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

当然,你可以有一个特定的类的枚举类型,如果你想。

+0

感谢JP工厂的完美工作。 –