(异常)Maven编译异常:不兼容的类型,推断类型不符合上限
Question今天Maven编译的时候,出现如下异常:[ERROR] COMPILATION ERROR :[INFO] -------------------------------------------------------------[ERROR] /Users/xx/Documents/Gitrep/xx/manager/src/main/java/com/xx/xx/xx/xxx
文章共623字 · 阅读需要大约3分钟
一键AI生成摘要,助你高效阅读
问答
·
Question
今天Maven编译的时候,出现如下异常:
[ERROR] COMPILATION ERROR :
[INFO] -------------------------------------------------------------
[ERROR] /Users/xx/Documents/Gitrep/xx/manager/src/main/java/com/xx/xx/xx/xxx/xxService.java:[165,49] 不兼容的类型: 推断类型不符合上限
推断: java.lang.Object
上限: capture#1, 共 ?,java.lang.Object
[INFO] 1 error
Solution
首先,定位到异常发生的地方。(因为保密的原因,简单的展示下代码)
源代码为:
public <T> T richConetnt(T content ){
if(null != content ){
if (content instanceof String) {
return (T) ("123" + +(String)content);
} else if (content instanceof Integer ) {
return (Integer)content);
}
}
public Object saveToQueue(List<?> contents) {
for(Object Content : contents){
content = rich(content);
}
return "abc";
}
修改为
public <T> T richConetnt(T content ){
if(null != content ){
if (content instanceof String) {
return (T) ("123" + +(String)content);
} else if (content instanceof Integer ) {
return (Integer)content);
}
}
public <T> Object saveToQueue(List<T> contents) { // 注意赋值的类型 ? = T 会导致转换错误 , 所以尽量不要用 ? 表示范型
for(T Content : contents){
content = rich(content); }
return "abc";
}
Reason
- 兼容性的问题,从报错可以直接的看出,是范型返回值类型的类型转换错误。
- 个人感觉
?
最好不要与T
进行混用,感觉T
更加的规范。 - 分析代码可以知道
Reference
[1]. java基础之泛型
[2]. Java总结篇系列:Java泛型
[3]. (知乎)Java instanceof 关键字是如何实现的?
[4]. 泛型推断类型不符合上限
更多推荐
已为社区贡献8条内容
所有评论(0)