是否可以加载scala类;动态的;?(如pythons导入模块)
目前,我正在尝试用Scala编写一个API。此API应处理文件后端,如Smb、S3、文件系统存储等 因此,我编写了一些类,如是否可以加载scala类;动态的;?(如pythons导入模块),scala,Scala,目前,我正在尝试用Scala编写一个API。此API应处理文件后端,如Smb、S3、文件系统存储等 因此,我编写了一些类,如Storage,它是存储后端的基类,以及FileSystemStorage,SmbStorage等子类,它们是Storage的子类,但从现在开始,如果我在设置文件中指定它们,我想使用这些类 我想要它就像在Django中一样:在这里我可以指定一个字符串,作为我默认的存储引擎 然后它应该“神奇地”工作,这样我就可以使用DefaultStorage访问文件系统存储或SmbStor
Storage
,它是存储后端的基类,以及FileSystemStorage
,SmbStorage
等子类,它们是Storage
的子类,但从现在开始,如果我在设置文件中指定它们,我想使用这些类
我想要它就像在Django中一样:在这里我可以指定一个字符串,作为我默认的存储引擎
然后它应该“神奇地”工作,这样我就可以使用DefaultStorage访问文件系统存储
或SmbStorage
,还可以创建更多的“存储”类。这可能吗
目前我想知道如何实现这一点,但我不确定这在scala中是否是一个好的实践。JVM类已经动态加载。您想要的是动态地选择一个实例 您可以执行以下操作:
def byName(name:String) = name match {
"FileSystemStorage" => FileSystemStorage
"SmbStorage" => SmbStorage
}
我假设这些是物体。如果它们是类,只需添加一个new
关键字
现在,如果类名在编译时未知,您可以执行class.forName(full\u qualified\u classname)
。但是这将为您提供一个类
对象,而不是类的实例,在这种情况下,您需要调用新实例
(假设它有一个无参数的构造函数)。你描述问题的方式表明你不想要这种方法