我在使用Java中的泛型時遇到了鑄造問題。 我試圖提供一個小例子來解釋我的問題。Java泛型在接口之間鑄造
IVariable.java
public interface IVariable {
}
IProblem.java
public interface IProblem<V extends IVariable> {
}
Algorithm.java
public class Algorithm<V extends IVariable, P extends IProblem<V>> {
public void doSomething(P problem) {
// ERROR: Type mismatch: cannot convert from P to IProblem<IVariable>
IProblem<IVariable> genericProblem = problem;
}
}
爲什麼我需要明確地投下變量genericProblem到
@SuppressWarnings("unchecked")
IProblem<IVariable> genericProblem = (IProblem<IVariable>) problem;
並得到警告?
該方法將P作爲類型IProblem的參數,因爲V也必須實現IVariable。 我的錯誤在哪裏?什麼是解決方法?
我不想寫
IProblem<V> genericProblem = problem;
因爲問題的輸入變量可能會有所不同。 無論如何,在我看來,IProblem<V>
比IProblem<IVariable>
更具體。
在此先感謝!