假设我有一个接口MyInterface和两个实现MyInterface的类A、B。
我声明了两个对象:MyInterface a = new A()和MyInterface b = new B()。
当我试图传递给函数-函数doSomething(A a){}时,我得到了一个错误。
这是我的代码:
public interface MyInterface {}
public class A implements MyInterface{}
public class B implements MyInterface{}
public class Tester {
public static void main(String[] args){
MyInterface a = new A();
MyInterface b = new B();
test(b);
}
public static void test(A a){
System.out.println("A");
}
public static void test(B b){
System.out.println("B");
}
}我的问题是,我是从一些组件接口获取的,这些接口可以是各种类型的类,我需要为每个类编写函数。
因此,一种方法是获取接口并检查它是哪种类型。(A的实例)
我想知道别人是如何处理这个问题的??
Thx
发布于 2008-09-30 22:39:18
你能不能只在每个类实现的接口上有一个方法?或者你不能控制界面?
这将提供多态性,并避免定义任何外部方法的需要。我相信这就是接口的意图,它允许客户端以一种非特定类型的方式对待所有实现它的类。
如果您不能添加到接口,那么您最好使用适当的方法引入第二个接口。如果既不能编辑接口,也不能编辑类,那么就需要一个将接口作为参数的方法,然后检查具体的类。然而,这应该是最后的手段,它颠覆了接口的使用,并将方法绑定到所有实现。
发布于 2008-09-30 22:44:53
听起来你想要的是这样的东西:
public static void test(MyInterface obj){
if(obj instanceof A) {
A tmp = (A)obj;
} else if(obj instanceof B) {
B tmp = (B)obj;
} else {
//handle error condition
}
}但请注意,这是非常糟糕的形式,表明您的设计中出现了严重的错误。如果您无法控制接口,那么,正如marcj所建议的,添加第二个接口可能是可行的。注意:你可以在保持二进制兼容性的同时做到这一点。
发布于 2008-09-30 22:38:35
我不清楚您实际问的是什么,但问题是您没有一个接受MyInterface类型参数的方法。我不知道Java中确切的语法是什么,但你可以这样做,比如If (b is B) { test(b as B) },但我不会这样做。如果你需要它是泛型的,那么使用MyInterface类型作为变量类型,否则使用B作为变量类型。您正在违背使用该接口的目的。
https://stackoverflow.com/questions/155388
复制相似问题