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