Essbase Java API打印EssDBFILEINFO数组失败求助
问题:打印EssDBFILEINFO数组未显示有效内容,该用枚举器还是迭代器?
我尝试打印数组但未成功,已搜索并尝试多种方法均无效。相关Javadoc对应IEssCube的listDbFiles方法。请问我应该使用枚举器还是迭代器?
代码
EssDBFILEINFO[] PagSize = cube.listDbFiles(IEssCube.ESS_FILETYPE_DATA); System.out.println(PagSize.length); for (int i = 0; i < PagSize.length; i++) { System.out.println(PagSize[i]); } System.out.println(Arrays.toString(PagSize)); System.out.println(Arrays.deepToString(PagSize));
输出
7 com.essbase.api.datasource.EssDBFILEINFO@1324409e com.essbase.api.datasource.EssDBFILEINFO@2c6a3f77 com.essbase.api.datasource.EssDBFILEINFO@246ae04d com.essbase.api.datasource.EssDBFILEINFO@62043840 com.essbase.api.datasource.EssDBFILEINFO@5315b42e com.essbase.api.datasource.EssDBFILEINFO@2ef9b8bc com.essbase.api.datasource.EssDBFILEINFO@5d624da6 [com.essbase.api.datasource.EssDBFILEINFO@1324409e, com.essbase.api.datasource.EssDBFILEINFO@2c6a3f77, com.essbase.api.datasource.EssDBFILEINFO@246ae04d, com.essbase.api.datasource.EssDBFILEINFO@62043840, com.essbase.api.datasource.EssDBFILEINFO@5315b42e, com.essbase.api.datasource.EssDBFILEINFO@2ef9b8bc, com.essbase.api.datasource.EssDBFILEINFO@5d624da6] [com.essbase.api.datasource.EssDBFILEINFO@1324409e, com.essbase.api.datasource.EssDBFILEINFO@2c6a3f77, com.essbase.api.datasource.EssDBFILEINFO@246ae04d, com.essbase.api.datasource.EssDBFILEINFO@62043840, com.essbase.api.datasource.EssDBFILEINFO@5315b42e, com.essbase.api.datasource.EssDBFILEINFO@2ef9b8bc, com.essbase.api.datasource.EssDBFILEINFO@5d624da6]
EssDBFILEINFO类方法截图

解答
你看到的输出是对象的默认toString()结果,和枚举器/迭代器无关,核心问题是EssDBFILEINFO类未重写toString()方法,所以打印时只会输出类名+哈希码。
解决方法
- 无需切换枚举器或迭代器,当前数组遍历方式完全可行
- 调用EssDBFILEINFO的getter方法获取有效属性,从截图可见的方法包括
getFileName()、getSize()、getLastModified()等,修改代码示例:
EssDBFILEINFO[] pagSize = cube.listDbFiles(IEssCube.ESS_FILETYPE_DATA); System.out.println(pagSize.length); for (EssDBFILEINFO fileInfo : pagSize) { System.out.printf("文件名:%s,大小:%d,最后修改时间:%s%n", fileInfo.getFileName(), fileInfo.getSize(), fileInfo.getLastModified()); }
关于枚举器/迭代器的疑问
- 数组本身用普通for循环或增强for循环(foreach)最直接高效
- 若一定要用迭代器,可将数组转为List后使用,但属于冗余操作:
List<EssDBFILEINFO> fileList = Arrays.asList(pagSize); Iterator<EssDBFILEINFO> iterator = fileList.iterator(); while (iterator.hasNext()) { EssDBFILEINFO fileInfo = iterator.next(); // 调用getter打印属性 }
内容的提问来源于stack exchange,提问作者sebroux
相关产品推荐
相关产品推荐

