我正在開發一個Android應用程序,我正在使用泛型的一部分。不過,我收到了一個我無法理解的編譯器錯誤。Android泛型錯誤:該方法不適用於參數
我有以下結構:
public interface IMakeableEncryptionBundle<T, F> {
public void setConfigurationFactory(F configurationFactory);
}
public class VigEncryptionBundle
implements IMakeableEncryptionBundle<ITextContent, VigConfigurationFactory> {
@Override
public void setConfigurationFactory(VigConfigurationFactory configFactory) {
// Set the factory.
}
}
public interface IConfigurationFactory { }
public final class VigConfigurationFactory implements IConfigurationFactory { }
我用它是這樣的:
private IMakeableEncryptionBundle<
ITextContent,
? extends IConfigurationFactory> encryptionBundle
= new VigEncryptionBundle();
這是什麼原因造成的錯誤:
VigConfigurationFactory configFactory = (VigConfigurationFactory) configObj;
encryptionBundle.setConfigurationFactory(configFactory);
「的方法setConfigurationFactory(capture#8-of?擴展IConfigurationFactory)的類型IMakeabl eEncryptionBundle不適用於參數(VigConfigurationFactory)「
但是這不正是」擴展「應該做什麼嗎?允許你使用子類/實現嗎?
而且這也不是工作:
encryptionBundle.setConfigurationFactory((IConfigurationFactory) configFactory);
編輯: 我試圖實現的,是有特定IConfiguration
實現的獨立性和放encryptionBundle
的實例在外部類。
同時我需要泛型來確保特定的IMakeableEncryptionBundle
實現可以使用它自己的IConfiguration
實現。
此外,根據下述建議給了我另一個錯誤:
private IMakeableEncryptionBundle<
ITextContent,
IConfigurationFactory> encryptionBundle
= new VigEncryptionBundle();
「類型不匹配:不能從VigEncryptionBundle轉換爲IMakeableEncryptionBundle」
我甚至想聲明以下沒有變化:
public interface IMakeableEncryptionBundle<T, F extends IConfigurationFactory>
我不明白你在編輯代碼時如何獨立於特定的實現並將'encryptionBundle'實例化到另一個類中。無論哪條線實例化encryptionBundle將取決於實現。你的意思是,你想用'VigConfigurationFactory'在一個類中創建一個'IMakeableEncryptionBundle',然後將它提供給另一個不知道該特定工廠的類嗎? – jacobm
確切地說,我使用'encryptionBundle'的類不應該瞭解特定的工廠。實例化它的將是外部類。這就是爲什麼我不能在這裏使用'VigConfigurationFactory'。 – Aseru
你實際上是否需要'F'類型的參數?爲什麼不刪除它,並用'IMakeableEncryptionBundle'在setConfigurationFactory的簽名中替換它的實例? –
jacobm