我有一个返回泛型类型列表的方法,方法如下所示。
protected <T extends SQLDataBean> List<T> getJavaListFromOracleArray(Array array) throws SQLException
然后我有一个名为 ReplacementBean 的对象,它扩展了 SQLDataBean。
在另一个类中,我有一个 List<ReplacementBean>
使用 set 方法接收 List<ReplacementBean>
我发现但不确定为什么我无法在集合中调用上面列出的方法。这意味着这会产生编译时错误:
setReplacements(this.getJavaListFromOracleArray(in.readArray()));
但是以下代码可以编译并正常工作。
List<ReplacementsBean> temp = this.getJavaListFromOracleArray(in.readArray());
setReplacements(temp);
我也尝试在 set 方法内部进行强制转换,如下所示,但它也有编译时错误。
setReplacements((List<ReplacementsBean>)this.getJavaListFromOracleArray(in.readArray()));
有没有什么方法可以在调用我的 set 方法之前不必执行设置临时局部变量的两行过程?虽然它确实有效,但最好不必这样做。
调用以下内容:
setReplacements(this.getJavaListFromOracleArray(in.readArray()));
导致错误 setReplacements(List<ReplacementsBean>) is not applicable for the arguments List<SQLDataBean>
setReplacements代码如下:
public void setReplacements(List<ReplacementsBean> replacements)
{
this.replacements = replacements;
}
如果我尝试这个:
setReplacements((List<ReplacementsBean>)this.getJavaListFromOracleArray(in.readArray()));
我收到错误“无法从 List<SQLDataBean>
转换”至List<ReplacementsBean>
.
最佳答案
这是编译器类型推断并不像您希望的那么好的情况之一。如果您显式指定泛型方法类型参数,则以下内容应该有效:
setReplacements(this.<ReplacementsBean>getJavaListFromOracleArray(in.readArray()));
在临时变量的情况下
List<ReplacementsBean> temp = this.getJavaListFromOracleArray(in.readArray());
setReplacements(temp);
编译器被迫实例化<T>
如<ReplacementsBean>
使作业顺利进行。
关于Java 泛型扩展返回方法转换错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13497054/