scala 有没有办法在没有示例实例的情况下生成通用实例?

发布于 2024-09-15 12:09:02 字数 340 浏览 5 评论 0原文

我正在尝试创建一个通用工厂,如下所示:

trait Factory[T] { def createInstance():T = new T() }
val dateFactory = new Factory[Date](){}
val myDate = dateFactory.createInstance()

“new T()”无法编译,因为 T 在运行时之前是未定义的。我知道我可以通过将类的实例传递给某种方法(即 createInstance(classOf[Date]) )来使其工作,

我问是否有一些内省魔法可以取代“new T()”,所以我可以创建我的超级简单工厂吗?

I was playing with creating a generic factory as follows:

trait Factory[T] { def createInstance():T = new T() }
val dateFactory = new Factory[Date](){}
val myDate = dateFactory.createInstance()

The 'new T()' doesn't compile, as T is undefined until runtime. I know that I can get it to work by passing in an instance of the class to some method (ie. createInstance(classOf[Date]) )

I am asking if there is some introspection magic that could replace 'new T()' so that I can create my super simple factory?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

断肠人 2024-09-22 12:09:02

这将起作用:

class Factory[T : ClassManifest] {
  def
  createInstance(): T =
    (implicitly[ClassManifest[T]]).erasure.newInstance.asInstanceOf[T]
}

如果为其实例化的类具有默认(零参数)构造函数。

This will work:

class Factory[T : ClassManifest] {
  def
  createInstance(): T =
    (implicitly[ClassManifest[T]]).erasure.newInstance.asInstanceOf[T]
}

if the class for which it is instantiated has a default (zero-arg) constructor.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文