2015-02-07 60 views

回答

4

您可以使用泛型:

public void foo(Class<? extends SomeInterface> c){ 
    doSomething(); 
} 
1

@Murelink有正確的答案。

然而

有沒有辦法來強制執行在編譯時?

這取決於你所說的「強制執行」的意思。泛型使用類型擦除在Java中實現,而Java運行時類型檢查不關注泛型類型約束。它只檢查參數的類型是Class

這意味着:

  • 如果呼叫進行反思,約束不被強制運行時的實際調用時。

  • 如果你編寫和編譯 - 源極和1.4 -target合規水平或更早的版本,那麼約束不被強制編譯一些來電者的代碼。

對這些事情都沒有辦法。

0

有沒有辦法在編譯時強制執行?

不是真的,像@StephenÇ指出,但可以使用請在運行時檢查SomeInterfaceInterface.class.isAssignableFrom(c)

相關問題