Java 将接口强制转换到其实现的替代方法
假设我有一个接口和实现:Java 将接口强制转换到其实现的替代方法,java,types,interface,casting,Java,Types,Interface,Casting,假设我有一个接口和实现: public interface ITest { } public TestClass implements ITest { } 在我的代码中,我有一些方法: public void pass(ITest testObject) { // } 在不预先知道我在上述方法中处理的是什么ITest实现的情况下,我如何转换到TestClass?例如,在上面的方法中,我可以执行cast((TestClass)testObject),但这需要事先了解实现,我希望您假设
public interface ITest {
}
public TestClass implements ITest {
}
在我的代码中,我有一些方法:
public void pass(ITest testObject) {
//
}
在不预先知道我在上述方法中处理的是什么ITest
实现的情况下,我如何转换到TestClass
?例如,在上面的方法中,我可以执行cast((TestClass)testObject)
,但这需要事先了解实现,我希望您假设我没有。(我知道我可以检查的所有实例并转换为正确的实现,但我不想这样做)
我希望类似于testObject.getImplementation()
的东西,当且仅当testObject
是类TestClass
的实例时,它才会返回一个TestClass
实例(如果ITest
,也会返回任何其他实现).您可以使用Object的方法,然后您将得到实现类。您的设计中存在一些错误。如果您需要进行转换,那么您的界面似乎太通用了
最好的方法是在接口中添加一个新方法:例如isOK()。每个实现都会在isOK()方法中进行自检
代码将成为
public void pass(ITest testObject) {
if (testObject.isOk()) {...}
}
因此不再需要cast了。您可以使用,但我怀疑您最好研究一下您的设计。也许ITest
应该公开一个方法?为什么要强制转换到TestClass
?如果你在你的方法中事先不知道这个类,你想用它做什么?我怀疑如果你进一步思考你要做的事情,你会发现其他的问题。如果你想施放,那你为什么要使用界面呢?