java - 标准化 java 构造函数以供反射使用

标签 java

我有一个 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/

相关文章:

java - 如何使用 okhttp 获取异步调用以将响应返回到主线程?

java - 您可以在不使用 return 命令的情况下从 while 循环返回字符串吗?

Java 客户端服务器应用程序 - 地址已在使用 : connect

Java 7 WatchService - 忽略同一事件的多次出现

java - 一段关于剪刀石头布游戏的Java代码

java - 如何在 java mail api 中将字符串转换为消息?

java.io.IOException : No route to host using MulticastSocket on MacOS X Snow Leopard 异常

Java 正则表达式。为什么这是错误的(Eclipse 表达式调试器)

java - C 内存泄漏与 packetsender 套接字

java - Spring Data Rest 嵌套属性使用 JsonUnwrapped 排序