Java中的原型而不是扩展

时间:2013-05-13 08:15:43

标签: java javascript prototype-programming

即使使用Reflection,无论如何都可以实现类似Javascript的原型设计吗?我可以将我的对象包装在另一个对象中,只是为了使用一个或两个以上的方法扩展其功能,而不将所有原始非私有方法连接到包装器类,或者extends是我得到的吗?

2 个答案:

答案 0 :(得分:2)

如果您正在寻找扩展方法,可以尝试Xtend。 Xtend是编译为java代码并消除样板代码的语言。

以下文字是从Xtend Docs for extensions

中窃取的

通过将扩展关键字添加到字段,局部变量或参数声明中,其实例方法将成为扩展方法。

想象一下,您希望在类Person上拥有一些特定于图层的功能。让我们假设您处于类似servlet的类中,并希望使用一些持久性机制来持久化Person。让我们假设Person实现了一个公共接口Entity。您可以拥有以下界面

interface EntityPersistence {
  public save(Entity e);
  public update(Entity e);
  public delete(Entity e);
}

如果你已经获得了这种类型的实例(通过工厂或依赖注入或者其他什么),就像这样:

class MyServlet {
  extension EntityPersistence ep = Factory.get(typeof(EntityPersistence))
  ...

}

您可以保存,更新和删除任何类似的实体:

val Person person = ...
person.save  // calls ep.save(person)
person.name = 'Horst'
person.update  // calls ep.update(person)
person.delete  // calls ep.delete(person)

答案 1 :(得分:0)

我认为你不能用Java做到这一点。你可以在Groovy中使用metaclasses

String.metaClass.world = {
    return delegate + " world!"
}

println "Hello".world()