1、一旦变量被transient修饰,变量将不再是对象持久化的一部分,该变量内容在序列化后无法获得访问。
2、transient关键字只能修饰变量,而不能修饰方法和类。注意,本地变量是不能被transient关键字修饰的。变量如果是用户自定义类变量,则该类需要实现Serializable接口。
3、被transient关键字修饰的变量不再能被序列化,一个静态变量不管是否被transient修饰,均不能被序列化。
可以的,你用 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
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)