Код: Выделить всё
java.net.http.HttpClient.VersionКод: Выделить всё
public enum Version { HTTP_1_1, HTTP_2 }
Код: Выделить всё
private static @NotNull String toStringHttpVersion(HttpClient.Version version) {
return switch (version) {
case HTTP_2 -> "HTTP/2";
case HTTP_1_1 -> "HTTP/1.1";
};
}
Это кажется рецептом для будущих проблем в любом случае точка развертывания, да? Что, если Oracle решит расширить перечисление с помощью HTTP_2_1 или даже встроить в него HTTP_1_0? Код, установленный во всей корпоративной системе, вызывающий toStringHttpVersion(), ужасно умрет.
(Почему HTTP_1_0 нет в перечислении в первом место для меня загадочно, кажется сломанным, этого перечисления не должно существовать, оно должно быть экземпляром класса Semver или, может быть, BigDecimal, но я отвлекся, и в любом случае java.net.HttpClient выдает чистое исключение IOException, если статус HTTP «запрещен», что недопустимо, я сейчас остановлюсь.)
Это действительно нужно написать:
Код: Выделить всё
private static @NotNull String toStringHttpVersion(HttpClient.Version version) {
return switch (version) {
case HTTP_2 -> "HTTP/2";
case HTTP_1_1 -> "HTTP/1.1";
default -> version.toString(); // future proof
};
}
Я что-то упустил или Java нужно ключевое слово Futureextensible, чтобы помечать перечисления, которым грозит будущее расширение, позволяя линтеру предупреждать об этом?>
Подробнее здесь: https://stackoverflow.com/questions/786 ... enum-as-fu
Мобильная версия