簡體   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