scala: аналогия с метаклассами в python? - PullRequest
6 голосов
/ 30 апреля 2011

в Scala мне нужно реализовать что-то похожее на метаклассы Python. в моем случае целью использования метаклассов обычно является создание реестра всех подклассов определенного базового класса, то есть сопоставление, скажем, строкового представления класса со ссылкой на класс. в python очень удобно помещать метакласс в базовый класс, чтобы ничего не нужно было делать в каждом подклассе. Я хочу сделать что-то подобное в Scala. Есть ли способ эмулировать метаклассы, или как-то иначе? спасибо!

Ответы [ 2 ]

4 голосов
/ 01 мая 2011

Если вы знаете полное имя класса, вы можете загрузить его, используя обычные методы отражения Java в java.lang.Class, а именно Class.forName(String fqClassName). Учитывая получившийся экземпляр Class, создание экземпляра легко только , если есть конструктор с нулевым аргументом, в противном случае вы запутаетесь в грязном мире всех типов отражения Java.

Если вы хотите своего рода «обнаружение», когда классы, неизвестные во время компиляции и чьи имена каким-либо образом не представлены в качестве входных данных или параметров программы, то подход с загрузчиком классов, вероятно, является единственным ответом.

2 голосов
/ 01 мая 2011

Нет ничего похожего на метаклассы python.Реестр, о котором вы говорите , может быть возможным с использованием пользовательских загрузчиков классов или отражений.

...