java getfield_Java 反射:通过 getField() 设置公共全局变量

139c865df05c8af0cd1ad3552f337e7b.png

Java 通过 getField() 操作公共全局变量

以前写 JavaWeb 项目启动初始化系统配置全局变量的代码,都是 variable = Properties.getProperty(name) 这样一行一行代码的设置,变量少还好说,变量一多真的很磨叽。所以一直想通过 循环 简化代码,重构某个项目时无意间发现了 Java 反射中的 getField() 以及其他相关方法,节省了大量代码,所以在此记录一下。由于反射的 性能 问题,只在系统启动时初始化数据使用。

依赖工具类 PropertiesUtils

package net.itanken.test.util;

import java.util.Properties;

public class PropertiesUtils {

private static Properties props = new Properties();

public static final String get(String key) {

return props.getProperty(key, "");

}

// 省略 Properties.load() 等其他相关代码

}

全局配置类 Configuration

重点代码为 Configuration.class.getField(name).set(Configuration.class, value);,在 foreach 循环中设置非空配置对应变量的值,.properties 文件中的 key 需与要设置的变量名一致。

package net.itanken.test.basic;

import net.itanken.test.util.PropertiesUtils;

/**

* System Config

* @author T

* @since 20180530

*/

public class Configuration {

public static String sysName = "系统名称";

public static String sysVer = "系统版本";

public static String resVer = "静态资源版本";

public static String support = "技术支持";

public static String copyright = "版权声明";

public static final boolean initConfig() {

String[] names = new String[]{"sysName", "sysVer", "resVer", "support", "copyright"};

String value = null;

try {

for (String name : names) {

value = PropertiesUtils.get(name);

if (value.length() > 0) {

Configuration.class.getField(name).set(Configuration.class, value);

}

// System.out.println(name + "=" + Configuration.class.getField(name).get(Configuration.class));

}

} catch (Exception e) {

return false;

}

return true;

}

}

测试结果

嗯,测试结果与 .properties 文件中的配置一致,OK。

sysName=自定义系统显示名称

sysVer=67.0.3396.62(正式版)

resVer=20180530150546

support=Technical support provided by StarSevenSky Studio.

copyright=©2018 子兮子兮 版权所有

其他

Class.getField(String name) 方法用于获取由 public 修饰的公共成员字段,获取 private 修饰的私有成员字段可使用 Class.getDeclaredField(String name) 方法。

与之对应的获取 所有 公共成员字段 和 私有成员字段 的方法为 Class.getFields() 和 Class.getDeclaredFields()。

另外从代码中可以看出,获取和设置字段值的方法分别为 get() 和 set()。

PS. 以前对 getField 及其他相关方法并不了解,完全是依靠 IDE 的代码提示功能在偶然间发现的,多亏了我的 IDE。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值