1

这是一个例子:

有一个基本类(A)可以处理许多不同的类(比如说 B、C、D 都扩展了 P)。在 AI 类中需要调用如下函数:

 public void doSmth(P variable) {
      B b = (B)variable;
      b.getSomeImportantInfo();
 }

为此,我尝试添加一个接口 (I) 并定义 B、C、D 实现它。

问题是,doSmth 将适用于所有这些类(B、C、D),我不希望它们都实现这个接口。所以我正在尝试做这样的事情:

 public void doSmth(P variable) {
      if(variable instanceof I) {
           ((I)variable).getSomeImportantInfo();
      }
 }

但这不起作用,因为它说它不能将变量转换为 I。

我怎样才能实现所需的行为?另外,我不能修改 P 并使其实现 I。

4

2 回答 2

0

我也想晚了,但是:

public static boolean isImplementsInterface(Class interfaze, Class clazz) {
    for (Class c : clazz.getInterfaces()) {
        if (c.equals(interfaze)) {
            return true;
        }
    }
    return false;
}

public static void main(String[] args) {
    System.out.println(isImplementsInterface(CharSequence.class, String.class));
}
于 2014-10-03T15:53:28.400 回答
0

我认为您不需要将变量显式类型转换为 I。一旦您检查它是否是“I”的实例,直接调用该方法并让程序在运行时决定..这将根据实际对象被调用,参考变量是指。

于 2014-10-03T16:28:04.340 回答