【问题标题】:Getting the type of parametrization of an instance of a parametrized class in scala在scala中获取参数化类实例的参数化类型
【发布时间】:2011-06-19 21:23:38
【问题描述】:

我是 Scala 的新手。 我需要得到一个类的参数化。 我怎样才能做到这一点 ?这个类看起来像这样:

   class OutPort[T](name: Symbol, owner: Component) extends Port[T](name)

我在 LinkedList 中有很多 OutPort。在另一个类中,我想获取 OutPort 实例的参数化,但参数化是任意的,并且无法使用 isInstanceOf 的解决方案。有没有为此目的的特殊方法,我还没有介绍过?

疯子

【问题讨论】:

    标签: scala parameterization


    【解决方案1】:

    保留该类型的清单,并使用它。如果你告诉我们你为什么要拿回那个,我们也许也能更好地回答这个问题。

    【讨论】:

    • 我必须制作一个模拟框架,我想在其中模拟某些组件的行为。在这个框架中,有一个 gui,我必须将 gui 中的值委托给组件。
    • 组件具有端口,这些端口使用特殊类型进行参数化。当我从 gui 获取输入时,我有字符串或整数,并且必须将它们装箱为另一种类型,该类型具有任何类型的字段数据,以存储任何类型的数据。字段数据的类型必须是任意的。然后我可以将盒装物品发送到一个组件,该组件必须将其委托给它的输出端口。一个组件可以有许多不同类型的输出端口。例如,当我得到数据并且它是一个 Int 时,我想用 int 参数化确定端口。框架必须处理生成的 scala 文件
    • 使用的数据类型是任意的,因此对我来说是未知的。我很抱歉我的英语很糟糕
    • @lunatikz - 您可以编辑您的问题以提供更多详细信息 - 比许多 cmets 更容易阅读! :-)
    • 如果你有一个 GUI,你可能有端口和连接的动态配置,并且无论如何都不会使用 type 参数。
    【解决方案2】:

    如前所述,您可以使用 ClassManifest 或清单。这是一个使用示例:

    class Foo[T](t: T)(implicit m: ClassManifest[T]) {
      def foo = m toString
    }
    
    scala> (new Foo(5)) foo
    

    ` res1: java.lang.String = Int

    scala> (new Foo("hi")) foo
    res2: java.lang.String = java.lang.String
    
    scala> (new Foo(new scala.swing.Frame)) foo
    res3: java.lang.String = scala.swing.Frame
    

    这里有一些与 Scala 清单相关的 SO 主题:

    What is a Manifest in Scala and when do you need it?

    How does Scala's (2.8) Manifest work?

    How do I get around type erasure on Scala? Or, why can't I get the type parameter of my collections?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-10
      • 1970-01-01
      • 1970-01-01
      • 2011-02-19
      • 1970-01-01
      相关资源
      最近更新 更多