gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:47:45 24 4
gpt4 key购买 nike

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com