efr*_*itz 11 java metaprogramming dynamic
我正在使用Java开发我的第一个真正的项目.尽管我对动态语言有更多的经验,但我开始对这门语言感到满意.
我有一个类似于以下的类:
class Single
{
public void doActionA() {}
public void doActionB() {}
public void doActionC() {}
}
Run Code Online (Sandbox Code Playgroud)
然后我有一个SingleList类充当这些类的集合(具体来说,它是用于2D Sprite库,而"actions"是各种变换:旋转,剪切,缩放等).我希望能够做到以下几点:
class SingleList
{
public void doActionA() {
for (Single s : _innerList) {
s.doActionA();
}
}
... etc ...
}
Run Code Online (Sandbox Code Playgroud)
有没有办法简单地将方法(或已知的方法列表)推迟到内部列表的每个成员?无需专门列出每个方法的任何方式,然后遍历每个内部成员并手动应用它?
为了使事情变得更难,方法是不同的arity,但都是返回类型"void".
thk*_*ala 11
遗憾的是,Java并不支持在运行时创建类,这正是您所需要的:SingleList需要使用必要的存根方法自动更新以匹配Single类.
我可以想到以下方法来解决这个问题:
使用Java反射:
SingleList类不会与兼容Single类的接口了.使用构建系统以及某种源代码生成器来自动创建SingleList.java文件.
SingleList在任何JVM(或您的IDE)中加载的Single类实际上与加载的类匹配.手动解决这个问题 - 创建一个接口(例如SingleInterface)或基类抽象类供两个类使用应该有所帮助,因为任何体面的IDE都会指出未实现的方法.适当的类架构可以最大限度地减少重复的代码,您的IDE可能有助于生成样板部件.
使用字节码生成库(如Javassist或BCEL)动态生成/修改SingleList类.