「java添加属性字段」如何添加属性字段

博主:adminadmin 2022-11-22 20:08:06 51

今天给各位分享java添加属性字段的知识,其中也会对如何添加属性字段进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

如何利用java反射机制往.java文件中添加属性

class

c

=

class.forname("student");

//通过字符串装载类,

必须是绝对路径,

即包括包名

object

o

=

c.newinstance();

//获取装载类的实例,

如果找不到就会抛出异常

class[]

cs=

{sting.class,int.class};

//定义一个类的数组,

一般这种都是用在method的参数列表

//string.class说明传的是类型

method

m

=

c.getmethod("study",cs);

//获取装载类的实例的study方法,

注意后面的参数,

class[]

ca

=

{"tom",18}

//和上面有点不同,

这里传的是值

object

result

=

m.invoke(o,ca);

//执行method方法,并获取结果

反射一般都用在类名,字段,方法可以随便变化的时候,

还可以进行统一的处理,提高扩展性

比如说hibernate框架的实体类,

预先你不可能知道实体类会有什么字段,

包括字段的类型都是有可能随意变化的,

这时候要获取指定类的字段信息就必须得使用反射了.

还有struts的actionform等都一样

以上纯属个人意见,

学得不是很深,希望能给你带来帮助

java 可以动态创建 属性字段么

可以的,你用 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;

}

@Override

public FieldVisitor visitField(int access, String name, String desc,

String signature, Object value) {

if (name.equals(this.name)) {

isFieldPresent = true;

}

return cv.visitField(access, name, desc, signature, value);

}

@Override

public void visitEnd() {

if (!isFieldPresent) {

FieldVisitor fv = cv.visitField(accessModifier, name, desc, null, null);

if (fv != null) {

fv.visitEnd();

}

}

cv.visitEnd();

}

}

3,添加属性的工具 AddField.java

Java code?

import java.io.File;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.OutputStream;

import org.objectweb.asm.ClassAdapter;

import org.objectweb.asm.ClassReader;

import org.objectweb.asm.ClassWriter;

import org.objectweb.asm.Opcodes;

public class AddField {

private Class clazz = null;

private ClassReader cr = null;

private ClassWriter cw = null;

private ClassAdapter ca = null;

private File classFile = null;

private final static String CLASS_FILE_SUFFIX = ".class";

public AddField(Class clazz) {

this.clazz = clazz;

}

/**

* 添加一个 public 的类成员

* @param fieldName 类成员名

* @param fieldDesc 类成员类型描述

*/

public void addPublicField(String fieldName, String fieldDesc) {

if(cr == null) {

try {

cr = new ClassReader(clazz.getCanonicalName());

} catch (IOException e) {

e.printStackTrace();

}

cw = new ClassWriter(cr, ClassWriter.COMPUTE_MAXS);

}

if(ca == null) {

ca = new AddFieldAdapter(cw, Opcodes.ACC_PUBLIC, fieldName, fieldDesc);

} else {

ca = new AddFieldAdapter(ca, Opcodes.ACC_PUBLIC, fieldName, fieldDesc);

}

}

/**

* 将字节码写入类的 .class 文件

*

*/

public void writeByteCode() {

cr.accept(ca, ClassReader.SKIP_DEBUG);

byte[] bys = cw.toByteArray();

OutputStream os = null;

try {

os = new FileOutputStream(getFile());

os.write(bys);

} catch (IOException e) {

e.printStackTrace();

} finally {

try {

os.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

/**

* 获得类文件的 File 对象

* @return

*/

private File getFile() {

if(classFile == null) {

StringBuffer sb = new StringBuffer();

sb.append(clazz.getResource("/"))

.append(clazz.getCanonicalName().replace(".", File.separator))

.append(CLASS_FILE_SUFFIX);

classFile = new File(sb.substring(6));

}

return classFile;

}

}

java中一个对象有2个属性,如何添加一个呢

直接赋值。

属性是根据我们所写的代码进行赋值添加,比如我们写一个人的代码,区分人时可以通过姓名,年龄,性别,职业区分,这些用来帮助我们区分人的行为就是属性,用来在代码的首行或者第二行进行赋值。

属性用来描述具体某个对象的特征,描述的是对象的状态信息,通常以变量的形式进行定义,变量通常分为成员变量和局部变量。

java添加属性字段的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于如何添加属性字段、java添加属性字段的信息别忘了在本站进行查找喔。

The End

发布于:2022-11-22,除非注明,否则均为首码项目网原创文章,转载请注明出处。