Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否可以加载scala类;动态的;?(如pythons导入模块)_Scala - Fatal编程技术网

是否可以加载scala类;动态的;?(如pythons导入模块)

是否可以加载scala类;动态的;?(如pythons导入模块),scala,Scala,目前,我正在尝试用Scala编写一个API。此API应处理文件后端,如Smb、S3、文件系统存储等 因此,我编写了一些类,如Storage,它是存储后端的基类,以及FileSystemStorage,SmbStorage等子类,它们是Storage的子类,但从现在开始,如果我在设置文件中指定它们,我想使用这些类 我想要它就像在Django中一样:在这里我可以指定一个字符串,作为我默认的存储引擎 然后它应该“神奇地”工作,这样我就可以使用DefaultStorage访问文件系统存储或SmbStor

目前,我正在尝试用Scala编写一个API。此API应处理文件后端,如Smb、S3、文件系统存储等

因此,我编写了一些类,如
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)
。但是这将为您提供一个
对象,而不是类的实例,在这种情况下,您需要调用
新实例
(假设它有一个无参数的构造函数)。你描述问题的方式表明你不想要这种方法