Как стать автором
Обновить
13
0

Java Developer

Отправить сообщение
Меня натолкнул на эту мысль вот этот абзац из JEP:
Sealing a class restricts its subclasses. User code can inspect an instance of a sealed class with an if-else chain of instanceof tests, one test per subclass; no catch-all else clause is needed. For example, the following code looks for the three permitted subclasses of Shape:

Shape rotate(Shape shape, double angle) {
if (shape instanceof Circle) return shape;
else if (shape instanceof Rectangle) return shape.rotate(angle);
else if (shape instanceof Square) return shape.rotate(angle);
// no else needed!
}


Пересмотрел JEP еще раз — в нем есть и такое утверждение:
For example, consider this code from earlier:
Shape rotate(Shape shape, double angle) {
if (shape instanceof Circle) return shape;
else if (shape instanceof Rectangle) return shape.rotate(angle);
else if (shape instanceof Square) return shape.rotate(angle);
// no else needed!
}
The Java compiler cannot ensure that the instanceof tests cover all the permitted subclasses of Shape. For example, no compile-time error message would be issued if the instanceof Rectangle test was omitted.


Немного запутанное описание, но, похоже, вы правы.
Да, в этом случае не нужен — запускал разные примеры и флаг остался от предыдущего запуска.
Она может быть и внутри и за пределами — зависит от условия if.
Например, тут она будет внутри:
if (obj instanceof String s) {
    System.out.println(s);
}

А тут за пределами:
if (!(obj instanceof String s)) {
  throw new Exception();
}
System.out.println(s);
Попробовал — ошибка та же (missing return statement). Начинает работать только после добавления ветки «else».
Я, возможно, не до конца понимаю вопрос, но попытаюсь ответить. По моим представлениям JVM состоит из трех основных частей: Runtime, GC и JIT компилятора. Краткий обзор JVM и его рантайма можно найти в главе 3 книги Java Perfomance, авторы Charlie Hunt и Binu John. О работе GC можно почитать в любой из книг, перечисленных в списке литературы. Плюс можно заглянуть в спецификацию JVM docs.oracle.com/javase/specs/jvms/se14/jvms14.pdf. У меня статей на эти темы пока нет, но, возможно, они появятся в будущем.
Спасибо, что ознакомились со статьей и представили свои замечания. Согласен, что OAuth2 — протокол авторизации, но ведь в статье так и написано. Статья и правда задумывалась как введение в OAuth2 для новичков и не претендует на пример идеального кода (возможно стоило указать это в статье сразу).
  1. В реализации используется 5-я версия и она действительно отличается от 4-й, хотя в целом конфигурирование приведенных вещей очень похоже и там и там.
  2. Согласен, в данном случае создавать его руками было не обязательно. Хотя Bitbucket не является стандартным провайдером, поэтому все тоже самое пришлось бы сделать в application.properties. Вариант с application.properties не подойдет, если нужно динамически создавать ClientRegistration в зависимости от каких-либо условий. В данном случае пример был вырезан из более крупного приложения и переносить это в application.properties руки не дошли.
  3. Насчет своей реализации UserService можно и согласиться и нет. Поддерживаю, что у этого решения есть свои минусы, но это решение использует стандартное API SS, поэтому тоже имеет право на существование.

По сути это обычная авторизация по протоколу OAuth2, где Bitbucket является сервером авторизации. Логин происходит с помощью учетной записи Bitbucket, других учетных данных нет, так что все вполне безопасно.

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность