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