java中的open类或隐式类

时间:2015-06-10 02:02:57

标签: java ruby scala class

Ruby中有概念名称open class,可以在不编写子类的情况下为现有类添加新方法。

在Scala中还有一个技术类隐式类可以做同样的事情,这里有一些代码片段:使用隐式类s,我实际上在类String中添加了一个新方法isCorrect。

object ImplicitDemo {

  implicit class s(s:String){
    def isCorrect = s.startsWith("dw_")
  }

  def main(args: Array[String]) {
    println("duowan" isCorrect )
  }

}

那么,有没有办法可以在纯java中做同样的事情?

2 个答案:

答案 0 :(得分:1)

遗憾的是,Java并不像Ruby那样允许重新开放类。我会解释一下,但说实话,这家伙做得很好。

Can a Java class add a method to itself at runtime?

答案 1 :(得分:1)

很多人都希望在Java中使用接口注入(在运行时向现有类添加新接口)多年(甚至几十年),但到目前为止,没有任何结果。

如果Java在将来的某个时间获得接口注入,那么与默认方法(在Java 7中添加)的组合确实允许添加像Scala这样的新方法。但是,它仍然不允许更改Ruby中的现有方法。

然而,在那之前,唯一的方法是通过自定义类加载器来重新加载类。