1

即使使用反射,也可以实现类似 Javascript 的原型设计吗?我可以将我的对象包装在另一个对象中,只是为了用一两个更多方法扩展它的功能,而不将其所有原始非私有方法连接到包装类,还是extends我得到的只是?

4

2 回答 2

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)
于 2013-05-13T08:49:32.130 回答
0

我不认为你可以在 Java 中做到这一点。您可以在 Groovy 中使用元类

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

println "Hello".world()
于 2013-05-13T08:49:08.383 回答