【问题标题】:Java create dynamic classJava创建动态类
【发布时间】:2011-04-05 23:05:06
【问题描述】:

我有 2 个问题希望有人能帮助我。有没有办法使用 android/java 动态创建一个类并向类添加变量?例如我想做这样的事情:

Class c = new Class();
c.name = 'testing';
c.count = 0;

c.getName = new function(){
  return c.name;
}

只是想知道这是否可能,或者是否有其他方法可以做到这一点。基本上我想构建一个对象,我可以将其中的数据用作对象。

【问题讨论】:

    标签: java android class dynamic


    【解决方案1】:

    不,您描述的语法在 Java 中是不可能的。我不确定您要在那里完成什么。如果你想创建一个类来动态保存数据,你可以创建一个匿名内部类。

    Object object = new Object() {
      private String name = testing;
      private int count = 0;
    
      public String getName() {
        return name;
      }
    }
    

    一般来说,我不会将它用于数据对象。此功能通常用于接口的匿名实现以支持回调等。

    【讨论】:

    • 感谢您的回复。我认为这就是我正在寻找的。有没有办法动态命名变量。例如,在 php 中,它被称为变量变量,您可以执行以下操作: $test = 'testing'; $$test = '什么';然后,如果您回显 $testing,您将得到“什么”。所以你基本上可以根据一个字符串来命名变量。
    • 不,那不可能。 Java 不是脚本语言。你不应该试图让它像一种脚本语言。这样做,您将失去 Java 的所有功能。你为什么要这样做?如果您解释了您想要完成的任务,我们或许可以帮助您找到 Java 的实现方式。
    • 好吧,我正在尝试使用 sax 解析器编写一个 xml 解析器,该解析器将创建一个我可以轻松解析独立于任何类型的 xml 文件的类。这样我就可以调用它来解析文件,然后独立处理数据。
    • 我明白了...您是否考虑过使用 dom 解析器?生成的 dom 模型本质上是一个通用的 java 对象树,您可以查询它以通过名称等获取特定于数据的事物。
    • 我考虑过,但从我正在阅读的内容来看,dom 解析器比 sax 解析器慢得多。这就是为什么我想创建自己的实现。
    【解决方案2】:

    通常不会这样做。它可以通过反射来完成,但这是一个相当糟糕的主意——这种类型的代码调试起来真的很烦人,不会在 IDE 中正确交互(例如,ctrl-clicking c.getName 的实例不会'无法跳转到定义方法的位置),这可能会对性能造成很大影响,等等。

    但是,对于某些通用工具,这是可能的。我相信 Hibernate 可能有能力从 DB 表创建类。

    然而,最常见的用途是在测试框架中使用模拟——它们几乎可以完全满足您的需求。用 TestNG 查看 EasyMock。

    不过,一般来说,您最好只定义一个业务类并使用它,而不是尝试创建一些抽象框架来为您生成类。

    【讨论】:

      猜你喜欢
      • 2016-10-24
      • 1970-01-01
      • 2011-04-16
      • 2021-05-02
      • 2011-10-30
      • 1970-01-01
      • 1970-01-01
      • 2017-04-15
      • 2012-09-29
      相关资源
      最近更新 更多