假设我有一个接口和实现:
public interface ITest {
}
public TestClass implements ITest {
}
在我的代码中,我有一些方法:
public void pass(ITest testObject) {
//
}
如果不事先知道我在上述方法中处理的ITest
的实现,我该如何转换为TestClass
?例如,在上面的方法中,我可以进行演员((TestClass)testObject)
,但这需要事先了解实现,我希望你假设我没有。 (我知道我可以检查所有instanceof
并投射到正确的实现,但我不想这样做。)
我希望testObject.getImplementation()
这样的内容返回TestClass
个实例当且仅当testObject
是instanceof
类TestClass
时(以及任何其他实现,如果ITest
)。
答案 0 :(得分:0)
您可以使用对象的getClass
方法,然后您将获得实施课程。
答案 1 :(得分:0)
你的设计出了问题。如果你需要进行强制转换,那么你的界面似乎太通用了。
最好的方法是在界面中添加新方法:例如 isOK()。每个实现都会在 isOK()方法中自行检查。
代码将变为
public void pass(ITest testObject) {
if (testObject.isOk()) {...}
}
因此不再需要施法。
答案 2 :(得分:0)
你可以使用Visitor pattern,但我更怀疑你最好不要去研究你的设计。也许WebServiceTemplate
应该公开一个方法?