分层模型问题中的泛型



我有以下类层次结构:

public interface Table<V> {
Map<String, Object> getNamedParams(SearchQuery<V> query);
}
public class TopicTable implements Table<Topic> {
@Override
public Map<String, Object> getNamedParams(TopicSearchQuery query) {
// TODO to be implemented
return null;
}
}
@Data
public abstract class SearchQuery<E> {
private Integer pageSize;
private Integer pageNumber;
}
public class TopicSearchQuery extends SearchQuery<Topic> {
private String orgId;
private Boolean isShared;
private String name;
private String description;
}

我的 IDE 抱怨从接口TablegetNamedParams的方法未在类TopicTable中正确实现。我知道这与继承和我对泛型的使用有关。 我正在尝试完成的:将实体,搜索查询和表绑定在一起,以便该表仅与适当的实体和搜索查询一起运行。我希望这是有凝聚力和强大的。关于我如何最好地实现它的任何想法,以便设计不会杂乱无章或繁琐,理想情况下,没有明确的强制转换。 提前谢谢。

此方法签名:

getNamedParams(TopicSearchQuery query) 

不重写该方法。它必须是:

getNamedParams(SearchQuery<Topic> query) 

您不能将参数的类型更改为比接口所需的更具体(因为这会违反 Liskov 可替代性(或更不具体(因为 Java 在覆盖时不允许它(。


如果希望能够要求更具体的参数类型,请添加另一个类型变量:

public interface Table<V, SQ extends SearchQuery<V>> {
Map<String, Object> getNamedParams(SQ query); 
}

然后,您可以声明实现类以使用该类型:

public class TopicTable implements Table<Topic, TopicSearchQuery> {
@Override
public Map<String, Object> getNamedParams(TopicSearchQuery query)

最新更新