【问题标题】:Is there a way to remove a Trait from an instance in Scala?有没有办法从 Scala 中的实例中删除特征?
【发布时间】:2011-08-19 18:23:55
【问题描述】:

我想知道是否有一个在运行时添加了特征的实例,可以从实例中删除特征,因此它可以像原来一样。

【问题讨论】:

  • 您不能在运行时添加特征。所以我不确定你在问什么。
  • 您能否举例说明在运行时向实例添加特征的含义?我问是因为据我所知,特征只能在编译时混合。有关它在 JVM 级别如何工作的详细信息,请参阅此答案:stackoverflow.com/questions/7057166/…
  • 他大概在想new Foo with Bar。这种模式看起来像一个动态的 mixin,但它都是静态的。它只是创建了一个将 Bar 混入 Foo 的匿名类。

标签: scala traits


【解决方案1】:

特征在编译时与类结合。因此无法在运行时添加/删除特征。

对于您的特定情况,请考虑在您的类中添加一个方法:

class Foo(val a: Object, val b: Object, ...) {
  def original() = new Foo(a, b, ...)
}

然后您可以调用instance.original() 来取回不受任何特征影响的对象副本。

【讨论】:

    【解决方案2】:

    这是不可能的。该实例属于特征代码所属的类。

    如果 JVM 支持“类+特征”之类的东西,那么理论上可以恢复它。

    【讨论】:

      猜你喜欢
      • 2012-12-25
      • 1970-01-01
      • 1970-01-01
      • 2022-11-29
      • 2017-03-10
      • 2014-08-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多