scala:类似于python中的元类?

scala:类似于python中的元类?,scala,metaprogramming,metaclass,Scala,Metaprogramming,Metaclass,在scala中,我需要实现类似于python元类的东西。在我的例子中,使用元类的目标通常是创建一个特定基类的所有子类的注册表——也就是说,从类的字符串表示到类的引用的映射。在python中,将元类放在基类上非常方便,这样就不需要对每个子类做任何特殊的操作。我希望在scala做类似的事情。有没有办法模仿元类,或者用另一种方法?谢谢 没有什么类似于python的元类。您提到的注册表可以使用自定义类装入器或反射。如果您知道类的完全限定名,可以使用Java.lang.class中常用的Java反射方法,

在scala中,我需要实现类似于python元类的东西。在我的例子中,使用元类的目标通常是创建一个特定基类的所有子类的注册表——也就是说,从类的字符串表示到类的引用的映射。在python中,将元类放在基类上非常方便,这样就不需要对每个子类做任何特殊的操作。我希望在scala做类似的事情。有没有办法模仿元类,或者用另一种方法?谢谢

没有什么类似于python的元类。您提到的注册表可以使用自定义类装入器或反射。

如果您知道类的完全限定名,可以使用
Java.lang.class
中常用的Java反射方法,即
class.forName(String fqClassName)
来加载它。给定
类的结果实例
,只有在有零参数构造函数的情况下实例化才容易,否则就会陷入所有Java反射类型的混乱世界


如果您想要一种“发现”,其中类在编译时未知,并且其名称没有以某种方式作为程序的输入或参数提供,那么类加载器方法可能是唯一的答案。

不清楚您最终想要什么,但在scala中没有与python元类等价的方法。如果你想从一个字符串中得到一个类,你应该使用class.forName.Thank——你能想出其他通用的方法从一个类类型中得到一个字符串表示,然后能够从该字符串中实例化该类的一个新对象吗?@Heinrich请看Randall的答案。一旦有了
java.lang.Class
,就可以在其上调用
newInstance
。但是,如果您想找到一个类的所有子类,可以问一个Java问题。