如何通过字符串为Class类变量赋值 基于字符串构建类对象
实现方案
c.variable写法无法运行的核心原因是Java为静态强类型语言,编译期会直接检查Math类是否存在字面值为variable的字段,不会将variable变量的实际运行时值作为字段名处理。你可以根据场景选择以下实现方式:
1. 反射实现(通用灵活,适合字段较多、变动频繁的场景)
通过Java原生反射API可以直接根据字符串名称获取类字段并赋值:
import java.lang.reflect.Field; public class Math { public String x = ""; public String y = ""; } // 赋值逻辑 String variable = keyVal[0]; String value = keyVal[1]; Math c = new Math(); try { Field field = Math.class.getField(variable); field.set(c, value); } catch (NoSuchFieldException | IllegalAccessException e) { // 自定义字段不存在或无访问权限的处理逻辑 e.printStackTrace(); }
如果字段为private修饰,需要在赋值前添加field.setAccessible(true)开启访问权限
2. 分支匹配(性能最优,适合字段少、结构固定的场景)
如果你的Math类字段数量少且不会频繁变更,可以直接用分支判断匹配字段名赋值,避免反射的性能开销和安全风险:
String variable = keyVal[0]; String value = keyVal[1]; Math c = new Math(); switch (variable) { case "x": c.x = value; break; case "y": c.y = value; break; default: throw new IllegalArgumentException("未定义的字段名:" + variable); }
3. JSON反序列化(最推荐,适配你当前JSON输入的场景)
你本身输入就是JSON字符串,不需要手动拆分键值对,直接用Jackson、Gson等成熟的JSON序列化库即可一步完成对象构建:
以Gson为例的实现代码:
import com.google.gson.Gson; // 输入JSON示例:{"x":"60%"} String inputJson = "你的原始JSON字符串"; Math c = new Gson().fromJson(inputJson, Math.class); // 自动完成所有字段赋值,直接使用即可
提示:自定义类名建议不要和JDK内置的java.lang.Math重名,避免后续使用时出现类冲突问题
内容的提问来源于stack exchange,提问作者Lucas.Feichtinger
相关产品推荐
相关产品推荐

