我有一个 PropertyBag
类,它模拟一组可由对象使用的属性。
我还有几个类 A1, A2, ..., AN
具有以下形式的构造函数
public A...(PropertyBag);
所有这些类都实现了接口(interface) iA
。
我使用反射来创建相关的 A...
并传入 PropertyBag
。我从 PropertyBag
对象中提取数据以生成类的候选成员数据。
不过,我想做的是在编译时 强制类A...
的实现者实现上述形式的构造函数。我知道我的要求很奇怪:你为什么要标准化施工参数?但我在这里有一个案例。
当然我可以做的是有一个单独的构造和初始化步骤,因为我可以将初始化函数标记为抽象的,甚至可能将 iA
更改为包含该抽象初始化函数的抽象类定义。我会使用反射来调用初始化。如果任何 A...
缺少该初始化函数,那将给我编译时失败,正如我所希望的那样。但我不喜欢将构造和初始化分开的想法,因为构造但未初始化的对象没有任何意义。
我是不是漏掉了什么技巧? (在 C++ 中,我可以在编译时使用模板强制执行,但在 Java 中看不到方法)。
最佳答案
What I want to be able to do though is to force an implementer of a class A... at compile time to implement a constructor of the above form.
恐怕你做不到。 Java 中没有任何东西可以强制执行。
您可以做的是编写一个单元测试来查找实现该接口(interface)的所有类(例如,通过查找 jar 文件中的所有类),然后检查它们是否具有这样的构造函数。它不如编译时安全,但聊胜于无。
关于java - 标准化 java 构造函数以供反射使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17339166/