我正在使用java來做一個日誌項目,並且我遇到了一種方法,它需要一個形式爲Class<HostResolver> hostResolver
的參數,其中HostResolver .class是一個接口。任何人都可以提出我在這裏傳遞的意思嗎?如何傳遞一個形式爲「Class <HostResolver> hostResolver」的變量
如果我傳入HostResolver.class,它將接受它作爲參數,但是然後在hostResolver.newInstance()失敗。但是,如果我傳遞HostResolver的實現,它表示它不是該方法的正確類型。
以下是具體的方法。
protected static HostResolver createHostResolver(final Class<HostResolver> hostResolver) throws
IllegalAccessException, InstantiationException {
return hostResolver.newInstance();
}
該方法被聲明嚴重的一類。參數類型應該是'Class <?擴展HostResolver>'。當'HostResolver'是一個接口時,要求參數*爲* HostResolver',這顯然是錯誤的。如果你不能改變方法,你可以用更糟糕的代碼解決這個問題:'createHostResolver((Class)MyHostResolver.class)'。原始的'Class'類將會繞過這個問題,但它是一個*黑客!* – Andreas
謝謝,原來這個方法本來是Class <?擴展了HostResolver>但改變沒有被推過。 – annedroiid