繁体   English   中英

如何创建检查实现是否满足接口的方法?

[英]How do I create a method to check that an implementation satisfies an interface?

我有一个接口(p)和一个实现(imp)。 如果我在代码中执行以下操作,则检查有效:

if (!(imp instanceof p)) {
   logger.error(imp.getClass().getName()+ 
    " doesn't satisfy the interface "
   +p.getClass().getName());
   }

我试着把它变成一个可调用的方法,如下所示:

private boolean checkInterfaceImplementation(Object implemen, Object inter){
    return (implemen instanceof inter);
}

失败了。

然后我发现inter需要是一个特定的类型,我不能使用通用对象。 然后我发现了

"B.class.isAssignableFrom(A.getClass())"

然后我做了:

System.out.println("B.class.isAssignableFrom(A
                    .getClass())");

输出是

真正

我从这个问题中读到了更多 我的问题是“这是(带有”.isAssignableFrom“的第二个实现)是实现所述方法的首选或标准方法吗?这个现有的实现有没有办法产生问题?

很难理解你的问题。 如果有必要,我会在收到更多详细信息时进行编辑,但作为一般经验法则, instanceof是缺乏多态性和设计问题的指标。 并非总是这样,但如果你是初学者,我会尝试尽可能少地使用它。

相反,考虑为什么检查甚至在那里。 如果“imp”实现“p”,那么您保证任何“imp”将具有“p”中的所有方法。 如果没有,您甚至可以在构建之前收到编译器错误。 这是非常抽象的,所以我会做一些快速的例子。

public interface Runs {
     public void run();
}

public class Cat implements Runs {
     int numLegs;
     public Cat() {
          this.numLegs = 4;
     }
     public void run() {
          System.out.println("does whatever running cats do");
     }
}

public class Human implements Runs {
     int numLegs;
     public Human() {
          this.numLegs = 2;
     }
     public void run() {
          System.out.println("does whatever running humans do");
     }
}
 public class Main {
         public static void main(String[] args) {
              Cat cat = new Cat();
              Human human = new Human();

              ArrayList<Runs> listOfRunners = new ArrayList<Runs>();
              listOfRunners.add(cat);
              listOfRunners.add(human);
              Runs runner = listOfRunners.get(0);
              /* no compiler error because by implementing Runs we guarantee it has run() method */
              runner.run();
              runner = listOfRunners.get(1);
              /* It doesn't matter what the object is. We don't care if it is cat or human */
              runner.run();
         }
    }

不确定你想要做什么,但这样的事情应该有效:

inter.getClass().isInstance(implemen)

尽管如此,最有可能的是你要做的事情要比采用这种做法更好。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM