编辑:解决,见下文
您好,
在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做到这一点?
答案:好的,如果界面名为MyInterface,你可以放
MyInterface obj;
obj.resolve();
很抱歉在发布之前没想过......
答案 0 :(得分:3)
您只需使用type cast:
即可((MyInterface) object).resolve();
通常最好进行检查以确保此演员表有效 - 否则,您将获得ClassCastException。你不能将没有实现MyInterface
的任何东西变为MyInterface
对象。执行此检查的方法是使用instanceof
运算符:
if (object instanceof MyInterface) {
// cast it!
}
else {
// don't cast it!
}
答案 1 :(得分:1)
if (object instanceof MyInterface) {
((MyInterface) object).resolve();
}
答案 2 :(得分:1)
MyInterface a = (MyInterface) obj;
a.resolve();
或
((MyInterface)obj).resolve();
java编译器使用静态类型来检查方法,因此您必须将对象转换为实现接口的类型或转换为接口本身。