我即将创建多个search-DTO-Class来构建和传输搜索查询参数。哪些参数可用取决于对象的数据库表。
因此,每个DTO课程不可能只有一个Enum
,导致每个DTO课程都有自己的Enum
可搜索参数。
搜索参数的实际集合将是EnumMap
(非整数,但为空)。我想在每个search-DTO-Class中使用getter
,put
和removeParameter
方法。
这三种方法在每个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); }
}
答案 0 :(得分:0)
棘手的是你需要枚举。
如果您有LOCATION_PARAMETER类,可以让它们扩展BaseParameter然后返回类似
的内容public Map<? extends BaseParameter, String> searchParameters(){}
你想让枚举扩展一个公共接口并让它作为返回类型可以工作,所以我认为如果你需要返回枚举,你必须使用接口。
编辑: 或者你可以让它无限制并返回你的枚举:
public Map<?, String> searchParameters(){}