我在使用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>
更具体。
在此先感谢!