“实体类”可不可以动态添加“字段”和“属性”

“实体类”可不可以动态添加“字段”和“属性”,第1张

可以的,你用 javassist, cglib 或者更为底层的工具 ASM 都是可以。

ASM 的话相对复杂一些,参考代码:

下面这个是用 ASM 工具为 Student 类添加一个 public String 类型的 address 属性:

1,需要添加属性的原始类:Student.java

Java code?

public class Student {

private int age

private String name

public int getAge() {

return age

}

public void setAge(int age) {

this.age = age

}

public String getName() {

return name

}

public void setName(String name) {

this.name = name

}

}

2,添加属性的适配器:AddFieldAdapter.java

Java code?

import org.objectweb.asm.ClassAdapter

import org.objectweb.asm.ClassVisitor

import org.objectweb.asm.FieldVisitor

public class AddFieldAdapter extends ClassAdapter {

private int accessModifier

private String name

private String desc

private boolean isFieldPresent

public AddFieldAdapter(ClassVisitor cv, int accessModifier, String name, String desc) {

super(cv)

this.accessModifier = accessModifier

this.name = name

this.desc = desc

}

所学知识有限,我也是新手,但是据我所知是不能动态添加字段和方法的。

但是我们可以用继承,建立一个子类,用子类来扩展父类的字段,重写父类的方法,也可以添加子类特有的方法。

也可以用has-a的形式,用一个类包涵另一个类的形式,为原来的类增加功能方法和字段。

基本上“动态添加一个数据库字段”是数据库SQL本身的事,与Delphi关系不大。

ADOCommand1.CommandText := 'alter table 表名 add 字段名1 varchar(12),字段名2 integer,字段3 datetime'

ADOCommand1.Execute


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/bake/11847180.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-19
下一篇2023-05-19

发表评论

登录后才能评论

评论列表(0条)

    保存