Это первый раз, когда я задаю вопрос, прошу прощения за мою ошибку при задании вопроса и скажите, как задать лучший вопрос, если это произойдет.
Что я спрашиваю:
Как я могу добавить функцию-член в анонимный объект, который вызывается вне этого объекта? Или это требование слишком странное, что не должно быть реализовано?
Рассмотрим это выражение объекта ниже:
variable = object : AClass()
{
// inside the declaration of anonymous object
override fun aFunction(i: Int)
{
// do something inside aFunction
}
}.apply {
// do something inside apply
}
Как добавить функцию fun bFunction(i: Int)
, которая , просто принадлежит variable
, , а не , принадлежит AClass
, которую можно вызывать, напрямую используя
variable.bFunction(1)
? Или это невозможно сделать?
То, что я пробовал (и, конечно, не удовлетворяю то, что хочу):
- Я могу создать функцию расширения
fun AClass.bFunction(i: Int)
для ее решения, однако это может быть «несправедливо» по отношению к другому экземпляру AClass
, поскольку им это на самом деле не нужно.
- Я могу создать класс вместо локального использования анонимного объекта, однако создать класс для ОДНОЙ переменной кажется слишком тяжелым.
- Я попытался добавить
bFunction
в объявлении анонимного объекта, где позиция упоминается выше. Однако я могу получить доступ только к этой функции внутри .apply {}
, но не вне этого назначения.
- Я попытался добавить
bFunction
внутри .apply {}
, но это также заставило меня просто получить к нему доступ внутри .apply {}
, а не вне этого назначения.
Чтобы быть более точным в исходном вопросе (который я решаю самостоятельно, набирая этот вопрос), чтобы избежать вопроса X - Y:
Я борюсь за рисование на компонентах Java GUI. То, чего я хочу достичь, это как «холст» или «бумага» внутри JFrame
, где я могу рисовать на нем все, что мне нравится, с помощью управления пикселями, полностью используя Kotlin.
После некоторых поисков я обнаружил, что основное решение вопроса «если я что-то рисую, используя функцию серии * 1056», это рисование исчезнет, когда (я изменяю размер или минимизирую этот JFrame, или просто вызываю это рисование функция слишком рано, когда этот JFrame показывает (примечание: мы можем использовать Thread.sleep
, чтобы отложить слишком ранний вызов)) ", это путем переопределения paint
function . Затем, чтобы переопределить его, я использую var image = BufferedImage(...)
для хранения того, что я нарисовал, и использую анонимный объект
painting = object : JFrame()
{
override fun paint(g: Graphics?)
{
contentPane.graphics.drawImage(image, 0, 0, this)
}
}.apply { /* do some initialization */ }
для переопределения функции paint
и отрисовки этого буферизованного изображения в contentPane, который, кажется, достиг того, чего я хочу, и просто "статическую" рисование.
Мне было интересно, как я могу добавить функцию updatePainting()
к этому painting
, которая заставляет меня просто изменить это буферизованное изображение, а затем вызвать эту функцию, чтобы обновить картину как «динамическую» картину. Однако, когда я набираю этот вопрос, я случайно обнаружил, что, просто изменив это изображение, автоматически обновит эту картину, нет необходимости вручную обновлять эту картину. Итак, этот оригинал На самом деле вопрос решен: эта bFunction не нужна в моей текущей ситуации . Но мне просто интересно, есть ли способ реализовать эти вещи, которые могут соответствовать этой (может быть странной) проблеме?