MCPcopy Create free account
hub / github.com/GCMiner/GCMiner / Test

Class Test

src/test/java/examples/Test.java:6–57  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

4import java.lang.reflect.Method;
5
6public class Test {
7 public static void createStudent() throws Exception {
8 ClassPool pool = ClassPool.getDefault();
9 CtClass cc = pool.makeClass("src\\test\\java\\examples.Student");
10 // 字段名为name
11 CtField param = new CtField(pool.get("java.lang.String"),"name", cc);
12 // 访问级别是 private
13 param.setModifiers(Modifier.PRIVATE);
14 // 初始值是 "Frankyu"
15 cc.addField(param, CtField.Initializer.constant("Frankyu"));
16
17 // 生成 getter、setter 方法
18 cc.addMethod(CtNewMethod.setter("setName", param));
19 cc.addMethod(CtNewMethod.getter("getName", param));
20
21 // 添加无参的构造函数
22 CtConstructor cons = new CtConstructor(new CtClass[]{}, cc);
23 cons.setBody("{name = \"yubo\";}");
24 cc.addConstructor(cons);
25
26 // 5. 添加有参的构造函数
27 cons = new CtConstructor(new CtClass[]{pool.get("java.lang.String")}, cc);
28 // $0=this / $1,$2,$3... 代表方法参数
29 cons.setBody("{$0.name = $1;}");
30 cc.addConstructor(cons);
31
32 // 6. 创建一个名为printName方法,无参数,无返回值,输出name值
33 CtMethod ctMethod = new CtMethod(CtClass.voidType, "printName", new CtClass[]{}, cc);
34 ctMethod.setModifiers(Modifier.PUBLIC);
35 ctMethod.setBody("{System.out.println(name);}");
36 cc.addMethod(ctMethod);
37
38 //这里会将这个创建的类对象编译为.class文件
39 cc.writeFile("");
40 }
41 public static void usingStudent() throws Exception{
42 ClassPool pool = ClassPool.getDefault();
43 CtClass cc = pool.getCtClass("src\\test\\java\\examples.Student");
44 // 实例化
45 Object student = cc.toClass().newInstance();
46 // 设置值
47 Method setName = student.getClass().getMethod("setName", String.class);
48 setName.invoke(student, "junjie");
49 // 输出值
50 Method execute = student.getClass().getMethod("printName");
51 execute.invoke(student);
52 }
53 public static void main(String[] args) throws Exception{
54 createStudent();
55 usingStudent();
56 }
57}

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected