Scala:类似于Python中的元类吗?

6
在Scala中,我需要实现类似Python元类的东西。在我的情况下,使用元类的目标通常是创建特定基类的所有子类的注册表 - 也就是说,从表示类的字符串到类引用的映射。在Python中,在基类上放置一个元类非常方便,因此每个子类都不需要进行特殊处理。我正在寻找一种类似于Scala的方法。有没有办法模拟元类,或以其他方式完成这项工作?谢谢!

2
不清楚你最终想要什么,但是在Scala中没有Python元类的等价物。如果你想从一个字符串获取一个类,你应该使用Class.forName。 - Kim Stebel
2个回答

4
如果您知道类的完全限定名称,可以使用Java反射方法中的常规方法java.lang.Class加载它,即Class.forName(String fqClassName)。如果给出Class的实例,则只有当存在零参数构造函数时才容易实例化,否则您将卷入所有Java反射类型的混乱世界。
如果您想要一种“发现”未在编译时已知且其名称未以某种方式作为程序的输入或参数提供的类,则类加载器方法可能是唯一的答案。

2

没有任何东西与Python的元类相似。您所说的注册表可能可以使用自定义类加载器或反射实现。


谢谢 - 你能想到其他一般的方法来从一个类类型获取字符串表示,并能够根据该字符串实例化一个新的对象吗? - Heinrich Schmetterling
@Heinrich 请查看Randall的回答。一旦您拥有了java.lang.Class,就可以在其上调用newInstance。但是,如果您想找到一个类的所有子类,请提出一个Java相关的问题。 - Daniel C. Sobral

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接