簡體   English   中英

擴展抽象類時,將通用枚舉類型指定為類型

[英]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;
    }
}

我有許多不同類型的類,例如以下類型(日期,字符串,整數等)。

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不在其范圍之內,即使我在類中實現了compareTo,也必須實現Comparable。

我認為這可以編譯並執行您想要的操作:

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枚舉指定一個特定的類。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM