Я не знаю, существует ли решение, но это было бы очень желательно.
Я делаю апплет Scala и хочу, чтобы основной класс апплета был одноэлементным, чтобы к нему можно было получить доступ в другом месте апплета, например:
object App extends Applet {
def init {
// do init here
}
}
Вместо этого я должен сделать класс App обычным инстанцируемым классом, в противном случае он жалуется, потому что конструктор является закрытым. Итак, уродливый хак у меня должен пойти:
object A {
var pp: App = null
}
class App extends Applet {
A.pp = this
def init {
// do init here
}
}
Я действительно ненавижу это, и это одна из причин, по которой я не люблю делать апплеты в Scala прямо сейчас.
Есть ли лучшее решение? Было бы неплохо ...
edit - я нашел довольно приличное решение для взлома с использованием неявного преобразования. Объявите ваш класс Applet как обычный класс, а затем добавьте:
class Appable {}
object App extends Appable {
implicit def appable2App(a:Appable) = inst
var inst: App = null
}
Затем просто установите переменную экземпляра при создании апплета, и вы сможете получить доступ ко всему, как к одиночному.