HSSFWorkbook无法向上转型为Workbook?编译报错求助
为什么这段Apache POI代码无法通过编译?
请教:为何下述代码无法通过编译?
POIFSFileSystem fs = new POIFSFileSystem(in); Workbook wb=new HSSFWorkbook(fs);编译器提示变量“wb”应声明为HSSFWorkbook类型对象。
嘿,这个问题我碰到过好几次,其实根源就两个可能,咱们一步步说:
1. 你大概率导错了Workbook类
如果你的代码里导入的Workbook不是Apache POI提供的统一接口,而是其他第三方库的类(比如某些小众Excel处理库),那这个类和HSSFWorkbook之间没有任何继承或实现关系,编译器当然不允许你把HSSFWorkbook实例赋值给一个完全不相关的变量类型。
解决办法:检查你的导入语句,确保用的是POI的标准Workbook接口:
import org.apache.poi.ss.usermodel.Workbook;
2. 你使用的POI版本太老了
在非常早期的Apache POI版本(比如3.0之前的远古版本),HSSFWorkbook还没有实现org.apache.poi.ss.usermodel.Workbook这个统一接口——那时候POI还没做统一的抽象设计,HSSFWorkbook是独立的类,根本和Workbook接口不搭边,自然没法多态赋值。
解决办法:
- 优先升级到较新的稳定POI版本(比如3.17及以上,或者最新的5.x系列),新版本里处理
.xls的HSSFWorkbook和处理.xlsx的XSSFWorkbook都实现了Workbook接口,完美支持多态; - 如果暂时没法升级,那就按照编译器提示来,直接把变量声明为
HSSFWorkbook类型:POIFSFileSystem fs = new POIFSFileSystem(in); HSSFWorkbook wb = new HSSFWorkbook(fs);
内容的提问来源于stack exchange,提问作者udevil
相关产品推荐
相关产品推荐

