Я пытаюсь понять, как правильно использовать EnumSet для эквивалента флагов C#. Вот моя реализация и методы, которые используют это. Как вы можете видеть, проверка наличия флага не работает должным образом. Не могли бы вы сообщить мне, что я делаю неправильно?Java EnumSet - добавить и проверить, содержит ли набор флаг
Я следующий Enum с EnumSet:
public enum ExcelRangeBordersFlag {
BORDER_LEFT,
BORDER_BOTTOM,
BORDER_TOP,
BORDER_RIGHT;
public static final EnumSet<ExcelRangeBordersFlag> SELECTED_BORDERS = EnumSet.noneOf(ExcelRangeBordersFlag.class);
}
(Является ли это сделано правильно?)
Теперь я хочу, чтобы иметь возможность делать такие вещи, как добавить к набору, и проверьте, если набор содержит значение. Но это не работает:
private static ExcelRangeBordersFlag getBordersFlag(boolean bottom, boolean top, boolean left, boolean right){
ExcelRangeBordersFlag results = null;
if (bottom){
results.SELECTED_BORDERS.add(ExcelRangeBordersFlag.BORDER_BOTTOM);
}
if (top){
results.SELECTED_BORDERS.add(ExcelRangeBordersFlag.BORDER_TOP);
}
if (left){
results.SELECTED_BORDERS.add(ExcelRangeBordersFlag.BORDER_LEFT);
}
if (right){
results.SELECTED_BORDERS.add(ExcelRangeBordersFlag.BORDER_RIGHT);
}
System.out.println(results);
return results;
}
private static void MergeAndWriteToCell(Sheet sh, int sRow, int eRow, int sCell, int eCell, ExcelRangeBordersFlag borders , String text){
CellRangeAddress cellRangeAddress = new CellRangeAddress(sRow, eRow, sCell, eCell);
sh.addMergedRegion(cellRangeAddress);
Row row = sh.getRow(sRow);
Cell cell = row.getCell(sCell);
cell.setCellValue(text);
if (borders.SELECTED_BORDERS.contains(ExcelRangeBordersFlag.BORDER_BOTTOM)){
RegionUtil.setBorderBottom(CellStyle.BORDER_MEDIUM, cellRangeAddress, sh, wb);
System.out.println("Contains bottom.");
}
if (borders.SELECTED_BORDERS.contains(ExcelRangeBordersFlag.BORDER_LEFT)){
RegionUtil.setBorderLeft(CellStyle.BORDER_MEDIUM, cellRangeAddress, sh, wb);
System.out.println("Contains left.");
}
if (borders.SELECTED_BORDERS.contains(ExcelRangeBordersFlag.BORDER_TOP)){
RegionUtil.setBorderTop(CellStyle.BORDER_MEDIUM, cellRangeAddress, sh, wb);
System.out.println("Contains top.");
}
if (borders.SELECTED_BORDERS.contains(ExcelRangeBordersFlag.BORDER_RIGHT)){
RegionUtil.setBorderRight(CellStyle.BORDER_MEDIUM, cellRangeAddress, sh, wb);
System.out.println("Contains right.");
}
System.out.println();
}
Последний метод показывает, что все типы ExcelRangeBorder содержатся, даже когда я делаю следующее:
borders = getBordersFlag(false, false, false, false);
MergeAndWriteToCell(sh, 4,4,1,3, borders, "Percent of Original List Price Received*");
Выход:
null
Contains bottom.
Contains left.
Contains top.
Contains right.
Я не понимаю, что вы пытаетесь спросить. – redFIVE
getBordersFlag должен вернуть мне перечисление с соответствующим EnumSet. MergeAndWriteToCell должен уметь видеть, содержит ли набор какое-либо одно из значений границы. – blgrnboy
Это не вопрос – redFIVE