getFontIndex() API 会 return 负索引的场景是什么?

What are the scenarios when getFontIndex() API will return negative index?

我正在使用 vaadin 电子表格。在我的程序中,我正在读取存储在数据库中的元数据,如 isBold、isItalic 等,并根据元数据在单元格上应用这些斜体、粗体等样式。应用这些样式后,我必须使用 spreadsheet.getSpreadsheetStyleFactory().cellStyleUpdated(cell, true); 刷新单元格。 (Vaadin 电子表格 api)。这个 api 有时会抛出 ArrayIndexOutOFBoundsException 失败,可以在下面找到

Caused by: java.lang.ArrayIndexOutOfBoundsException: -32768 at java.util.ArrayList.elementData(ArrayList.java:400) [rt.jar:1.7.0_80] at java.util.ArrayList.get(ArrayList.java:413) [rt.jar:1.7.0_80] at org.apache.poi.xssf.model.StylesTable.getFontAt(StylesTable.java:386) [seqnc-common-jar-1.0.0.jar:] at org.apache.poi.xssf.usermodel.XSSFCellStyle.getFont(XSSFCellStyle.java:557) [seqnc-common-jar-1.0.0.jar:] at com.vaadin.addon.spreadsheet.XSSFColorConverter.colorStyles(XSSFColorConverter.java:97) [seqnc-common-jar-1.0.0.jar:] at com.vaadin.addon.spreadsheet.SpreadsheetStyleFactory.addCellStyleCSS(SpreadsheetStyleFactory.java:594) [seqnc-common-jar-1.0.0.jar:] at com.vaadin.addon.spreadsheet.SpreadsheetStyleFactory.cellStyleUpdated(SpreadsheetStyleFactory.java:461) [seqnc-common-jar-1.0.0.jar:]

这里发生的是 XssfCellStyle 以某种方式具有负索引 -32768,它被用作 ArrayList 中的索引。

我只想知道什么情况下XssfCellStyle中的fontIndex会被设置为负值

找到问题了。我的代码不必要地创建了很多(大约 40,0000 )字体 objects.So 40K + 需要字体索引来存储它们。但是当我看到 XSSFCellStle.getFontIndex() 方法的来源时,整数索引被类型转换为 short

 @Override
public short getFontIndex() {
    return (short) getFontId();
}

因为我有超过 40K 个对象,索引值超过了 Short 数据类型的限制,即 32767。因此任何高于 32767 的索引都将作为负的 short 值出现。我通过将我的字体对象限制在 32767 以下范围

来解决问题