当方法名称不同时,oop Java将代码提取到通用方法
我有一段代码,可以在MyType
类型的一些对象上进行迭代:
// result is of type Map<Long, MyType>
for (final Map.Entry<Long, MyType> someMyTypeObject: result.entrySet() {
// Do a bunch of stuff
Status status = someMyTypeObject.getStatus();
// Do some more stuff
}
不,我正在添加一个流来处理类型为Map<Long, MyNewType>
的结果,它需要做完全相同的事情,而唯一的区别是返回状态的方法的命名不同(比如-getObjectStatus()
而不是getStatus()
)。我无法更改这两种方法的名称
我想做这样的事情:
public <T> doIterationWork(Map<Long, T> result) {
// Do a bunch of stuff
Status status = someMyTypeObject.getStatus();
// Do some more stuff
}
问题是——我不能使用这个方法,因为我不能判断哪种类型是T
。我考虑过重载3种方法:
public void getStatus(MyType obj) { return obj.getStatus(); }
public void getStatus(MyNewType obj) { return obj.getObjectStatus(); }
public void getStatus(Object obj) { // throw exception }
但是我不能这样做,因为调用是根据静态类型而不是动态类型设置的(因此我将始终使用Object
重载)
有没有一种好的模式可以在不改变原有类的情况下处理这种情况,而现在还不能选择
# 1 楼答案
它并不十分优雅,但您可以使用instanceof检查类型,强制转换对象并调用相应的方法
比如: