java中的开放类或隐式类

java中的开放类或隐式类,java,ruby,scala,class,Java,Ruby,Scala,Class,Ruby中有一个概念名OpenClass,它可以在不编写子类的情况下向现有类添加新方法 Scala中还有一个技术类隐式类也可以这样做,下面是一些代码片段:对于隐式类s,我实际上向类字符串添加了一个新方法isCorrect object ImplicitDemo { implicit class s(s:String){ def isCorrect = s.startsWith("dw_") } def main(args: Array[String]) { pri

Ruby中有一个概念名OpenClass,它可以在不编写子类的情况下向现有类添加新方法

Scala中还有一个技术类隐式类也可以这样做,下面是一些代码片段:对于隐式类s,我实际上向类字符串添加了一个新方法isCorrect

object ImplicitDemo {

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

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

}

那么,有没有一种方法可以在纯java中实现同样的功能呢?

不幸的是,java不允许像Ruby那样重新打开类。我会解释的,但老实说,这家伙做得很好


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

如果Java在将来的某个时候得到接口注入,那么与默认方法(在Java7中添加)的结合将确实允许添加新方法,如Scala中的方法。然而,它仍然不允许更改Ruby中的现有方法


但是,在此之前,唯一的方法是通过自定义类加载器重新加载类。

注意:在Scala示例中,您没有将
isCorrect
添加到
String
。您正在创建一个新类
s
,它有一个
isCorrect
方法,以及从
String
s
的隐式转换。我知道开放类和隐式转换之间的区别,但我想实现的是在不编写子类的情况下向现有类添加新方法。