簡體   English   中英

如何確保參數實現接口

[英]How to ensure an argument implements an interface

我正在一個項目中,該項目具有從抽象類Generator繼承的類的列表。 它的工作方式就像一條責任鏈 ,其中每個類都在另一個類之后實例化,並調用generate()方法。 唯一的特別之處在於,每個Generator都傳遞給下一個Generator ,以便下一個能夠調用上一個Generator某些方法,以確保它以相同的假設繼續進行其工作。

通過這種設置,我希望允許鏈上的每個類確定前一個必須實現的接口,以便它知道可用的方法。

如果該類未實現此類接口,則將僅顯示錯誤(它是命令行工具)。

我一直在研究幾種可能性,但是我真的不知道如何正確地實現這一點。 您能想到在編譯時執行此操作的方法嗎? 我需要像instanceof一樣進行運行時檢查嗎?

如果有幫助,我在這里留下一些骨架來表示我現在擁有的東西。

public abstract class Generator {
    protected Generator(Object somePrivateStuff) {/* ... */}
    public abstract void generate();
}

public class SpecialGenerator extends Generator {
    protected SpecialGenerator(Object o) { super(o); }
    public void generate() {
        // Some actual implementation
    }
}

public class Main {
    public static void main(String[] args) {
        // Dynamically load all the classes extending Generator
        // via the Reflections library, and call the method generate()
        // on each one
    }
}

任何想法將不勝感激。 提前致謝。

如果您動態加載類(例如,按String名稱),則instanceof是無用的,因為您在編譯時不知道它們。 相反,您應該使用Class#isAssignableFrom()

for (Class<?> clazz : loaded) {
    if (Generator.class.isAssignableFrom(clazz)) {
        // instantiate
    } else {
        // print error
    }
}

在不知道應如何精確執行實例化的情況下,很難建議更詳細的代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM