【发布时间】:2024-05-02 01:05:02
【问题描述】:
我有接口Datagram 和几个实现它的类,例如A 和B。
在运行时的某个时刻,我通过实现给定接口(即A 或B)的蓝牙对象接收。我通过添加特殊类标识号作为发送消息的第一个字节来区分它们。
关键是我需要一个包含所有实现给定接口的类的数组,所以我可以将它们分配给字节数。类的唯一标识符中的那个数字,我用它从字节数组中获取对象,通过蓝牙从另一个设备发送。
现在它是通过创建像private static final Class[] datagramClasses = { A.class, B.class }; 这样的数组来“手动”完成的,但这是一种非常不合时宜的方式——如果我将C 类添加到我的程序中,我也需要将它附加到datagramClasses 数组中。或者,我可以在每个 Datagram 中发送完整的班级名称,但这会很愚蠢。
在做了一些研究之后,我想出了一些想法:
- 从
.class文件中获取信息(类名)并使用Class.forName("com.mypackage.A");。但 Android 使用单个.dex文件而不是.class文件。 - 使用外部库来做到这一点 - 我试过Reflections 和其他几个,但我无法在 Android 平台上编译它们。有没有更简单的库可以解决问题?
- 创建 Maven 插件就可以了。我成功地将 Maven 添加到我的 Android 项目中,但是我无法编译一些额外的插件来开发相关的库(同样,由于 Android 的限制)。我可以用 Java 创建另一个相关项目,并在那里开发插件,但我担心它会太复杂。
任何帮助将不胜感激,
格雷格
编辑:我希望能够执行如下代码:
final List<Class> list = new ArrayList<>();
for (final Class c : allAplicationClasses)
if (isAssignableFrom(Datagram.class))
list.add(c);
【问题讨论】:
-
如何在
Datagram中创建一个静态工厂方法,根据内容创建A、B等实例? -
为什么需要那个数组?
-
@pskink 我已经编辑了我的问题,希望现在更清楚了。
标签: java android maven reflection maven-plugin