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

“实体类”可不可以动态添加“字段”和“属性”,第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

}

所谓实体类,据我观察主要用在泛型集合里,为了满足强类型系统的要求.OOP的思想就是用人类认识世界的方式去做程序设计.所以,把我们看到的一切都作为对象, 比如人类, 我可以用程序去描述他, 身高,体重,肤色,种族等等, 把这"一类"抽象出来.

这就给我们一个感觉, 实体类只包含属性,没有方法.尽管方法和属性其实一样,只是属性描述数据成员, 这也是C#优势所在, 它更接近人类认识世界的过程 --- 属性,比如上述的身高,体重等.但是其他语言似乎没有属性一说.

把所有动作(方法和事件)放在另外的类中, 叫做控制类. 这就是MVC的概念.


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

原文地址: http://outofmemory.cn/bake/11449290.html

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

发表评论

登录后才能评论

评论列表(0条)

保存