gpt4 book ai didi

Java元编程

转载 作者:搜寻专家 更新时间:2023-10-30 21:28:37 24 4
gpt4 key购买 nike

我正在使用 Java 开发我的第一个真正的项目。尽管我对动态语言有更多的经验,但我开始适应这种语言。

我有一个行为类似于以下的类:

class Single
{
public void doActionA() {}
public void doActionB() {}
public void doActionC() {}
}

然后我有一个 SingleList 类充当这些类的集合(具体来说,它用于 2D Sprite 库,“ Action ”是各种转换:旋转、剪切、规模等)。我希望能够执行以下操作:

class SingleList
{
public void doActionA() {
for (Single s : _innerList) {
s.doActionA();
}
}

... etc ...
}

有什么方法可以简单地将方法(或已知的方法列表)推迟到内部列表的每个成员?无需专门列出每个方法,然后遍历每个内部成员并手动应用它的任何方法?

为了让事情变得更难一些,这些方法的数量各不相同,但都是返回类型“void”。

最佳答案

不幸的是,Java 并不支持在运行时创建类,而这正是您所需要的:SingleList 需要使用必要的 stub 方法自动更新以匹配 Single类。

我可以想到以下解决这个问题的方法:

  1. 使用 Java reflection :

    • 优点:
      • 它很容易以 Java 语言提供,您可以轻松找到文档和示例。
    • 缺点:
      • SingleList 类将不再与 Single 类接口(interface)兼容。
      • Java 编译器和任何 IDE 通常无法帮助处理通过反射调用的方法 - 编译器捕获的错误通常会转化为运行时异常。
      • 根据您的用例,您可能还会看到明显的性能下降。
  2. 使用构建系统和某种源代码生成器来自动创建 SingleList.java 文件。

    • 优点:
      • 设置完成后,您将无需再处理它。
    • 缺点:
      • 设置起来有一定的难度。
      • 您必须单独确保加载到任何 JVM 或您的 IDE 中的 SingleList 类实际上与加载的 Single 类匹配。
  3. 手动解决此问题 - 创建一个接口(interface)(例如 SingleInterface)或两个类都使用的基本抽象类应该会有所帮助,因为任何像样的 IDE 都会指出未实现的方法。适当的类架构可以最大程度地减少重复代码,您的 IDE 可能能够帮助生成样板部分。

    • 优点:
      • 没有设置曲线可以克服。
      • 您的 IDE 将始终看到正确的类集。
      • 通常会在之后改进类架构。
    • 缺点:
      • 一切都是手动的。
  4. 使用字节码生成库,例如 JavassistBCEL即时动态生成/修改 SingleList 类。

    • 优点:
      • 这种方法非常强大,从长远来看可以节省大量时间。
    • 缺点:
      • 使用字节码生成库通常不是微不足道的,不是胆小的人。
      • 根据您编写代码的方式,您可能还会遇到 IDE 及其对动态类​​的处理问题。

关于Java元编程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8868102/

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