当前位置: 首页 > 知识库问答 >
问题:

动态创建字段和方法

魏岳
2023-03-14

我想为给定的类添加新的字段(变量)和封装方法。 例如:一个类名学生没有任何字段,如下所示:

public class Student implements Serializable{

}

然后在我的应用程序中创建一个实例;

Student s=new Student();

我想为student类添加在运行时不存在的新方法。例如:我想添加名为StudentName的字段,以及GetStudentName()SetStudentName()方法。

那么在运行时,student对象将如下所示;

public class Student implements Serializable{

    private String studentName;

    public void setStudentName(..){}
    public String getStudentName(){return ...;}
}

在我的应用程序中,对象被写到一个文本文件中,并且所有相同类型的对象并不具有所有变量。 因此,我想只添加必需的字段以节省内存。

有什么办法能做到这一点吗? 有样本代码或链接吗?

编辑:或者我们可以创建一个类并创建不存在的实例吗?

编辑2:谢谢大家的回答,得到了很多信息和想法。 并从您的建议中选择了一条更好的途径

共有3个答案

商德泽
2023-03-14

虽然字节码操作是可能的,但这并不明智,特别是如果您打算这样做以“节省内存”。 你不太可能有这么多的数据,以至于它会产生影响,如果你有的话,你无论如何也会将它们存储在数据库中。

晁砚
2023-03-14

您可以为此使用字节码检测库,如Javassist或ASM。 下面是一个使用Javassist添加字段或方法的示例。

潘修文
2023-03-14

为什么不创建一个值的hashmap呢? 效率更高,并且具有您想要的所有灵活性。

public class Student
{
      private HashMap<String, String> values;

      public Student()
      {
          this.values = new HashMap<String, String>();
      }

      public void addValue(String name, String value)
      {
          values.put(name, value);
      }

      public String getValue(String name)
      {
          return values.get(name);
      }
}

为什么是哈希地图?

您说过所有对象可能具有不同的值,您将通过string定义这些新方法和属性。 嗯。。 这将在没有任何可怕的字节码操作的情况下实现该功能。 例如:

String attrName = "name";
String attrValue = "jim";
Student stu = new Student();
stu.addValue(attrName, attrValue);

目前,您的hashmap中只有一个值。 您唯一需要面对的是HashMap对象本身和两个方法,坦率地说,这是一个更整洁的解决方案的公平交换。

 类似资料:
  • 问题内容: 我在尝试了解如何在Django中创建动态选择字段时遇到了一些麻烦。我有一个模型设置类似: 我想做的是创建一个选择字段whos的值是与该骑手相关联的航点(将是登录的人)。 目前,我以如下形式覆盖init: 但是所有要做的就是列出所有路标,它们与任何特定的骑手都没有关联。有任何想法吗?谢谢。 问题答案: 你可以通过将用户传递给表单init来过滤航点 启动表单时从你的角度来看 在模型形式的情

  • 问题内容: 这是有关django的问题。我有一个模特说“汽车”。这将具有一些基本字段,例如“颜色”,“车辆所有者名称”,“车辆成本”。 我想提供一个表格,用户可以根据他要添加的汽车添加额外的字段。例如,如果用户添加“汽车”,则他将在运行时动态地在表单中添加其他字段,例如“汽车里程”,“校准制造商”。假设用户想要添加“卡车”,他将添加“可以运载的货物”,“许可证”等。 如何在Django中实现这一目

  • 问题内容: 使用angular.js,我有一个要显示给用户进行编辑(然后提交)的表单域的动态列表: 和HTML: 看到这个小提琴。由于我不明白的原因,文本输入框不可编辑。如上所述,我尝试了两种不同的方法:和。是完全不可编辑的,将允许 一次 击键,然后变得模糊。我究竟做错了什么?谢谢。 问题答案: 它是可编辑的,但是在每次按键后,您的文本字段失去焦点,因此您必须再次单击它以放置另一个字符。 发生这种

  • 我试图根据属性文件中定义的URL数量创建动态JButton和JLabel。 到目前为止,我尝试的是: 在我的Java程序中,我正在读取属性文件,并根据拆分字符串,现在我需要相应地生成按钮和标签。就像

  • 本文向大家介绍C#动态创建button的方法,包括了C#动态创建button的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C#动态创建button的方法。分享给大家供大家参考。具体实现方法如下: 希望本文所述对大家的C#程序设计有所帮助。

  • 本文向大家介绍Javascript动态创建div的方法,包括了Javascript动态创建div的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Javascript动态创建div的方法。分享给大家供大家参考。具体实现方法如下: 希望本文所述对大家的javascript程序设计有所帮助。

  • 这是我的主页,在那里我选择了一个选项字段。 opt1.php: 这是我的javascript,在这里我从上面的select获得值,并传递给opt2.php 这是我的opt2.php页面,用于显示sub select。 实际上,这并没有产生预期的结果。 有没有逻辑上或处理上的错误?

  • 本文向大家介绍javascript动态创建链接的方法,包括了javascript动态创建链接的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了javascript动态创建链接的方法。分享给大家供大家参考。具体分析如下: 动态创建链接示例: 希望本文所述对大家的javascript程序设计有所帮助。