1 /**
2 * 反射
3 * 根据属性名前缀+编号获取值、设置值
4 * 如item + 12, mark +5
5 */
6 public class HandleProperty {
7
8 /**
9 * 取值
10 * @param object
11 * @param prefix
12 * @param i
13 * @return
14 */
15 public static Object getProperty(Object object, String prefix, int i) {
16 try {
17 Class<?> objectClass = object.getClass();
18
19 // 根据前缀和索引获取属性值
20 String propertyName = prefix + i;
21 String getterMethodName = "get" + propertyName.substring(0, 1).toUpperCase() + propertyName.substring(1);
22 Method getterMethod = objectClass.getMethod(getterMethodName);
23 return getterMethod.invoke(object);
24 } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) {
25 e.printStackTrace();
26 return null;
27 }
28 }
29
30 /**
31 * 设置参数值类型为String
32 * @param object
33 * @param prefix
34 * @param i
35 * @param value
36 * @return
37 */
38 public static Object setProperty(Object object, String prefix, String i, String value) {
39 try {
40 Class<?> objectClass = object.getClass();
41
42 // 根据前缀和索引构建属性名
43 String propertyName = prefix + i;
44 String setterMethodName = "set" + propertyName.substring(0, 1).toUpperCase() + propertyName.substring(1);
45
46 // 获取属性的 setter 方法
47 Method setterMethod = objectClass.getMethod(setterMethodName, String.class);
48
49 // 调用 setter 方法设置属性值
50 setterMethod.invoke(object, value);
51 return object;
52 } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) {
53 e.printStackTrace();
54 return null;
55 }
56 }
57
58 /**
59 * 设置参数值类型为int
60 * @param object
61 * @param prefix
62 * @param i
63 * @param value
64 * @return
65 */
66 public static Object setProperty(Object object, String prefix, String i, int value) {
67 try {
68 Class<?> objectClass = object.getClass();
69
70 // 根据前缀和索引构建属性名
71 String propertyName = prefix + i;
72 String setterMethodName = "set" + propertyName.substring(0, 1).toUpperCase() + propertyName.substring(1);
73
74 // 获取属性的 setter 方法
75 Method setterMethod = objectClass.getMethod(setterMethodName, int.class);
76
77 // 调用 setter 方法设置属性值
78 setterMethod.invoke(object, value);
79 return object;
80 } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) {
81 e.printStackTrace();
82 return null;
83 }
84 }
85
86 /**
87 * 设置参数值类型为Long
88 * @param object
89 * @param prefix
90 * @param i
91 * @param value
92 * @return
93 */
94 public static Object setProperty(Object object, String prefix, String i, Long value) {
95 try {
96 Class<?> objectClass = object.getClass();
97
98 // 根据前缀和索引构建属性名
99 String propertyName = prefix + i;
100 String setterMethodName = "set" + propertyName.substring(0, 1).toUpperCase() + propertyName.substring(1);
101
102 // 获取属性的 setter 方法
103 Method setterMethod = objectClass.getMethod(setterMethodName, Long.class);
104
105 // 调用 setter 方法设置属性值
106 setterMethod.invoke(object, value);
107 return object;
108 } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) {
109 e.printStackTrace();
110 return null;
111 }
112 }
113
114
115 public static void main(String[] args) {
116 User getUser = new User();
117
118 // 使用前缀 "item" 和索引 2 获取属性值
119 Object itemPropertyO = getProperty(getUser, "item", 2);
120 Long itemProperty = (Long)itemPropertyO;
121 System.out.println("Item Property: " + itemProperty);
122
123 // 使用前缀 "mark" 和索引 1 获取属性值
124 Object markPropertyO = getProperty(getUser, "mark", 1);
125 String markProperty = (String)markPropertyO;
126 System.out.println("Mark Property: " + markProperty);
127
128
129
130 User setUser = new User();
131
132 // 使用前缀 "item" 和索引 2 设置属性值为字符串
133 setProperty(setUser, "item", "2", "NewStringValue");
134 System.out.println("Item Property After Setting (String): " + setUser.getItem2());
135
136 // 使用前缀 "item" 和索引 2 设置属性值为整数
137 setProperty(setUser, "item", "2", 42);
138 System.out.println("Item Property After Setting (int): " + setUser.getItem2());
139
140 // 使用前缀 "mark" 和索引 1 设置属性值为整数
141 setProperty(setUser, "mark", "1", 123);
142 System.out.println("Mark Property After Setting (int): " + setUser.getMark1());
143 }
144 }