#kotlin #extension-methods #static-methods
#kotlin #расширение-методы #статические методы
Вопрос:
У меня есть следующий код:
import javax.swing.*
...
UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName())
UIManager.put("ToolTip.border", BorderFactory.createEmptyBorder())
UIManager.put("PopupMenu.border", BorderFactory.createEmptyBorder())
...
Я хочу избавиться от всех UIManager.
определителей, вот так:
UIManager.run {
setLookAndFeel(getCrossPlatformLookAndFeelClassName())
put("ToolTip.border", BorderFactory.createEmptyBorder())
put("PopupMenu.border", BorderFactory.createEmptyBorder())
...
}
Конечно, этот код не компилируется. Возможно ли этого достичь?
Комментарии:
1.
import javax.swing.UIManager.*
2. Я не хочу загрязнять пространство имен другими методами.
3. Я не вижу других вариантов без создания оболочек. Если вам не нравится общее название
put
, вы можете создать служебный метод с другим именем и вызвать этот метод. Или создайте,object
который переносит каждый вызов в UIManager, а затем вызываетrun
этот объект.
Ответ №1:
для достижения этого вы можете использовать ключевое слово ‘with‘. Это одна из функций определения области видимости в Kotlin.
with(UIManager)
{
setLookAndFeel(getCrossPlatformLookAndFeelClassName())
put("ToolTip.border", BorderFactory.createEmptyBorder())
put("PopupMenu.border", BorderFactory.createEmptyBorder())
...
}
В конечном итоге вы ожидаете какую-то функцию определения области видимости.В этой статье дается подробное объяснение usecase для каждой функции области видимости в Kotlin. https://medium.com/@elye.project/mastering-kotlin-standard-functions-run-with-let-also-and-apply-9cd334b0ef84
Комментарии:
1. форматирование вашего кода не соответствует соглашениям Java / Kotlin kotlinlang.org/docs/reference /…
2. @Eugene Я не совсем понимаю, на что вы ссылаетесь.
3.
For curly braces, put the opening brace in the end of the line where the construct begins, and the closing brace on a separate line aligned horizontally with the opening construct.
4.
Classifier 'UIManager' does not have a companion object, and thus must be initialized here
.5. @dyukha Да, это проблема. Не пробовал это с java static. Изучаю это. Обновлю, если смогу обойти это.