Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/380.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将接口强制转换到其实现的替代方法_Java_Types_Interface_Casting - Fatal编程技术网

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
?如果你在你的方法中事先不知道这个类,你想用它做什么?我怀疑如果你进一步思考你要做的事情,你会发现其他的问题。如果你想施放,那你为什么要使用界面呢?