Problem
我试图设计两种过滤列表的方法
public List<TypeA> filter(List<TypeA> typeAList) {
//duplicated code
//filter typeAList using some parameters in typeA objects
//return filtered list
}
public List<TypeB> filter(List<TypeB> typeBList) {
//duplicated code
//filter typeBList using some parameters in typeB objects
//return filtered list
}
问题是这两种方法都有重复的代码,除了过滤部分,我在那里访问TypeA和TypeB中的不同参数.
Things I tried so far
- 我试着做一个这样的通用方法.但这并不支持
public <T> List<T> filter(List<T> genericList) {
//duplicated code
if (T instanceOf TypeA)
//filtering code for TypeA
if (T instanceOf TypeB)
//filtering code for TypeB
//return filtered list
}
- 使用两个调用私有泛型筛选方法的方法重载.我
public List<TypeA> filter(List<TypeA> typeAList) {
//call innerFilter(typeAList)
}
public List<TypeB> filter(List<TypeB> typeBList) {
//call innerFilter(typeBList)
}
private <T> List<T> innerFilter(List<T> genericList) {
//duplicated code
if (T instanceOf TypeA)
//filtering code for TypeA
if (T instanceOf TypeB)
//filtering code for TypeB
//return filtered list
}
- 试图让这两个类实现一个公共接口并使用
Help needed
我对设计真的很陌生.我想知道我的推理是否正确.也在寻找解决这个问题的最佳替代方法的建议.提前谢谢.