2015-04-29 3 views
3

Этот вопрос был задан (и, вероятно, ответил) на старых форумах Haxe на болтовне ... но кажется, что весь форум больше не функционирует. Поэтому я прошу здесь:Haxe: как объявить «статические» методы в интерфейсе?

В Haxe мне нужно объявить «интерфейс» классу, который включает статическую функцию «instance()». Но когда я делаю так:

You can't declare static fields in interfaces

Так я удалить слово "статический" из public function instance() [...], и я получаю это: "Уловка-22"

Field instance needed by [...] is missing.

По-видимому, Но, очевидно, должно быть какое-то простое решение. Что это?

ответ

5

Как вы указали, язык не допускает статические поля на интерфейсах. Выбор преднамерен. Другая вещь, которая не существует, наследует статические поля.

Существует несколько способов структурирования кода, чтобы избежать такого использования, которое, на мой взгляд, не дает вам много преимуществ. Кажется, что наиболее очевидным является заводская модель или подход DI (я предлагаю minject library).

Учитывая комментарий ниже пойти на typedef вместо интерфейса:

typedef GetInstance = Void -> Void; 

Вы можете передать, что ЬурейиЙ вокруг такие же как интерфейс с тем преимуществом, что вы можете использовать как статические, так и экземпляр методы, чтобы удовлетворить что подпись.

+0

Практический пример - это просто, что этот класс имеет «открытый статический экземпляр функции»(), который возвращает экземпляр singleton. Приложение содержит несколько библиотек, которые должны ссылаться друг на друга как «extern», а это значит, что они должны знать об интерфейсе, который включает эту функцию. Другими словами, они должны иметь возможность вызвать эту функцию, среди прочих. Пожалуйста, уточните в своем ответе ... –

+0

Почему вы хотите получить доступ к статическому полю интерфейса? Допустим, у вас есть интерфейс ISingleton, какой смысл делать ISingleton.instance? Что бы вы там ожидали? Статические поля следует вызывать непосредственно или ссылаться. Я также думаю, что лучше избегать одиночных игр. Вы можете найти много минусов в Интернете по этой теме. –

0

Проверьте библиотеку Singleton. Любой класс, который реализует Singleton, автоматически объявляет статическую «экземплярную» переменную и соответствующую функцию getter.

Примечание: на момент написания настоящего документа версия Haxelib (1.0.0) устарела. Загрузите версию Git.

Смежные вопросы