在接口或抽象类中通用使用尚未存在的枚举

时间:2017-11-06 09:45:27

标签: java generics enums

我即将创建多个search-DTO-Class来构建和传输搜索查询参数。哪些参数可用取决于对象的数据库表。 因此,每个DTO课程不可能只有一个Enum,导致每个DTO课程都有自己的Enum可搜索参数。

搜索参数的实际集合将是EnumMap(非整数,但为空)。我想在每个search-DTO-Class中使用getterputremoveParameter方法。

这三种方法在每个DTO-Class中的逻辑相同,但它们的返回类型不同(Map)。所以我的问题是:

是否可以声明这三个函数是通用的? 我有一个接口,它将由任何search-DTO-Class实现。但是,我需要使用不符合个人Enum目的的通配符。

示例代码:

public class LocationSearchParametersDTO

{
    public enum LOCATION_PARAMETER
    {
        ID("id");
        private String queryParam;

        private LOCATION_PARAMETER(String queryParam){ this.queryParam=queryParam; }

        public String getQueryParam(){ return queryParam; }
    }

    private final Map<LOCATION_PARAMETER, String> searchParameters = new EnumMap<>(LOCATION_PARAMETER.class);

    public Map<LOCATION_PARAMETER, String> getParameters(){ return Collections.unmodifiableMap(searchParameters); }

    public void put(LOCATION_PARAMETER param, String value){ searchParameters.put(param, value); }

    public void removeParameter(LOCATION_PARAMETER param){ searchParameters.remove(param); }

}

1 个答案:

答案 0 :(得分:0)

棘手的是你需要枚举。

如果您有LOCATION_PARAMETER类,可以让它们扩展BaseParameter然后返回类似

的内容
public Map<? extends BaseParameter, String> searchParameters(){}

你想让枚举扩展一个公共接口并让它作为返回类型可以工作,所以我认为如果你需要返回枚举,你必须使用接口。

编辑: 或者你可以让它无限制并返回你的枚举:

 public Map<?, String> searchParameters(){}