我正在编写一个脚本,以便在应用程序部署在新的群集上时自动为某些特定的MongoDB集合配置分片。该应用程序正在使用Lift框架,基本上每个分片集合都映射到一个MongoRecord类,该类扩展了特定的" ShardedCollection"特征。我需要在这些类上调用一个特定的方法来获取它们的集合名称。
所以第一步是在代码中找到那些特定类,为此我使用ClassUtil。然后我需要一种实例化它们的方法,为此我认为java反射应该能够做到。它的工作正常,但前提是这些类不属于外部类。
此特定边缘情况下的配置如下:
class X {
class Y extends ShardedCollection {
}
}
因此,在阅读了一些文档之后,我发现我必须调用YConstructor.newInstance(XObject)
,newInstance将XObject作为第一个参数(作为X的实例)当Y是X的内部类时。我的策略是递归地实例化封闭类,直到我得到具有ShardedCollection特征的类。
当X不再是类而是特征时出现问题,然后没有我可以使用的构造函数,但我仍然需要将XObject提供给newInstance .. Tricky :(
<小时/> 要非常简洁from the java doc
如果构造函数的声明类是非静态上下文中的内部类,则构造函数的第一个参数需要是封闭的实例
封闭的东西&#34;我该怎么做?是一个特质? (假设我无法修改代码库中的任何内容)