例如,我想要做的事,如:如何要求.class參數成爲Java中的某個類?
public void foo(Class c){
doSomething();
}
但我想Class c
參數是一個類已經實現了一個特定的接口。有沒有辦法在編譯時強制執行?
例如,我想要做的事,如:如何要求.class參數成爲Java中的某個類?
public void foo(Class c){
doSomething();
}
但我想Class c
參數是一個類已經實現了一個特定的接口。有沒有辦法在編譯時強制執行?
您可以使用泛型:
public void foo(Class<? extends SomeInterface> c){
doSomething();
}
@Murelink有正確的答案。
然而
有沒有辦法來強制執行這在編譯時?
這取決於你所說的「強制執行」的意思。泛型使用類型擦除在Java中實現,而Java運行時類型檢查不關注泛型類型約束。它只檢查參數的類型是Class
。
這意味着:
如果呼叫進行反思,約束不被強制運行時的實際調用時。
如果你編寫和編譯 - 源極和1.4 -target合規水平或更早的版本,那麼約束不被強制編譯一些來電者的代碼。
對這些事情都沒有辦法。
有沒有辦法在編譯時強制執行?
不是真的,像@StephenÇ指出,但可以使用請在運行時檢查SomeInterfaceInterface.class.isAssignableFrom(c)