Код: Выделить всё
finallyКод: Выделить всё
increaseIndentLevel();
try {
serializeChildren()
} finally {
decreaseIndentLevel()
}
< /code>
Использование Try-with-resources Я создал умный и элегантный маленький подраздел, который гарантирует, что это сделано более свободно: < /p>
protected Closeable increaseIndentLevel() {
indentLevel++;
return Close.by(this::decreaseIndentLevel);
}
< /code>
Close.by()Код: Выделить всё
try (final Closeable indention = increaseIndentLevel()) {
serializeChildren()
}
< /code>
Unfortunately OpenJDK javac 17 with linting turned on doesn't recognize my cleverness, and instead complains:
[WARNING] auto-closeable resource indention is never referenced in body of corresponding try statementЯ понимаю, что Try-with-resources требует, чтобы я объявил некоторую переменную. Я не могу сказать, что попробовать (ingivenIndEntlevel ()) Например. (Я также могу угадать причину: создатели этой функции недостаточно обобщали и вместо этого создали излишне ограничительные правила для очевидного, 99% использования. Последнее средство, какой идентификатор я использую с @suppresswarnings () , чтобы это предупреждение исчезло в Javac? (Я должен был подавить предупреждение, потому что оно превращает такое красивое решение во что -то такое уродливое.)
Подробнее здесь: https://stackoverflow.com/questions/738 ... ed-warning