2010-01-16 34 views
6

编辑:解决了,见下面的Java - 确保一个对象实现的接口

嗨,

在Java中,我得到了一个对象,它可以是任何种类的。但 - 该对象将始终需要实现一个接口,所以当我调用接口定义的方法时,该对象将包含该方法。

现在,当您尝试在Java中的通用对象上调用自定义方法时,它会忽略键入操作。我怎样才能以某种方式告诉编译器,我的对象确实实现了该接口,因此调用该方法是可以的。

基本上,我正在寻找的是这样的:

Object(MyInterface) obj; // Now the compiler knows that obj implements the interface "MyInterface" 
obj.resolve(); // resolve() is defined in the interface "MyInterface" 

我如何能做到这一点在Java中?

答:OK,如果接口名为MyInterface的你可以把

MyInterface obj; 
obj.resolve(); 

对不起,发布前没有想到....

+0

*微笑* - +1为您的最后一句话:-) – 2010-01-16 14:31:05

回答

1
if (object instanceof MyInterface) { 
    ((MyInterface) object).resolve(); 
} 
1
MyInterface a = (MyInterface) obj; 
a.resolve(); 

((MyInterface)obj).resolve(); 

java编译器使用静态类型ch eck的方法,所以你必须将对象转换为实现你的接口的类型或者转换为接口本身。

3

你只是做了一个type cast

((MyInterface) object).resolve(); 

通常最好是做一次检查,以确保这个转换是有效的 - 否则,你会得到一个ClassCastException。你不能将任何不执行MyInterface的东西硬塞进一个MyInterface对象中。你做这个检查的方式是与instanceof运营商:

if (object instanceof MyInterface) { 
    // cast it! 
} 
else { 
    // don't cast it! 
}