0

我有数十个 JSON 片段要解析,对于每个片段,我都需要获取正确解析器的实例。我的想法是创建一个配置文件,在其中写入要为每个解析器实例化的类的名称(一种映射 url -> 解析器)。回到您的解决方案,如果我有一个指向 Any 的指针,我将无法调用我在每个解析器中实现的方法。我想这是一个非常常见的问题,有一个很好的解决方案,但我不知道最佳实践可能是什么。

我真的没有使用 Java、反射、类加载和所有这些东西的经验。那么,任何人都可以为我写下下面方法的主体吗?我需要获取作为字符串传递的类的实例(构造函数不需要参数,至少到目前为止......)

def createInstance(clazzName: String) = {
  // get the Class for the given clazzName, e.g. "net.my.BeautifulClazz"

  // instantiate an object and return it
}

谢谢,像往常一样...

4

1 回答 1

1

有一个非常简单的答案:

scala> def createInstance(clazzName: String) = Class.forName(clazzName).newInstance
createInstance: (clazzName: String)Any

scala> createInstance("java.lang.String")
res0: Any = ""

如果它适合你,一切都很好。如果没有,我们必须查看您的类加载器。这通常是事情变脏的时候。

根据您想要做什么,请查看:

  1. 蛋糕模式,如果你想在编译时组合你的类
  2. OSGi 当你想构建一个插件基础设施时(看这里一个非常简单的例子)
  3. 谷歌 guice,如果你真的需要依赖注入(例如混合 Scala 和 Java 代码时)并且蛋糕模式不适合你
于 2013-08-20T07:30:41.327 回答