2015-04-26 105 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工廠的完美工作。 –