我发现类重新加载将极大地提高生产力。我认为重新定义类是非常有限的。
多年来,我们发现了几种变通方法,以使用某种领域特定语言 (DSL) 或更自由的形式(如 XML 或 json 或属性文件)不断更改我们的应用程序的一部分,或者使用像 javascript 这样的脚本语言,function (){}
从字符串重新定义是可能并且很容易覆盖以前的函数定义。
我的想法:
注释可以使类可重新加载,或使类充当脚本,即.java 文件可以被视为DSL。
@Reloadable
public SomeReloadableClass{
}
@Script
public SomeReloadableClass{
}
现在有人担心可重载类的引用可能会在其他地方有所帮助,这会在尝试卸载类时导致内存泄漏。
为了克服这个问题,应该强制执行一些限制。虽然这部分很难,但我们可以有接口契约,也可以通过注解。如果需要,可以为导出和依赖项强加一个合同,类似于 OSGi 描述符,但在使用拦截器或接口的类中。它应该比 OSGi 更简单,因为 OSGi 关心版本依赖匹配等,这不是每个类都需要的。
@Reloadable (exports='..., ...')
public SomeReloadableClass{
public start(){ ...}
public stop() { ...}
}
我觉得这个功能会非常方便,作为一个副产品,我们可以使用 java 作为配置文件,java 作为 DSL,而程序的大部分部分仍然是一个编译的单体,以具有足够的性能。
javascript 程序总是使用 javascript 或 json 作为配置描述符,这又是一种 javascript 对象表示法。我们应该能够在 java 或任何 jvm 语言中做同样的事情。
java模块系统是否专注于此?
注意:我觉得这不是一个问题格式,而是一个提案,从这个意义上说,它在错误的 QA 站点中。我不知道该搬到哪里,所以我在这里大声思考。建议把它移到哪里。