论 f.getModifiers() & Modifier.FINAL &Modifier.STATIC 如何成立

此篇紧接《将HttpServletRequest中的参数反射至实体类》文:

如果&、|、&&、||没弄清楚的同学,请戳这里!

首先在《API之家》中查询关于java.lang.reflect.Field的资料,如下:
http://www.apihome.cn/api/java/Field.html
其实关键在于getModifiers方法,API中是这样写的:
getModifiers() :以整数形式返回由此 Field 对象表示的字段的 Java 语言修饰符。
这里的整数形式就来源于:java.lang.reflect.Modifier
我截取了最常用的4个(PUBLIC、PRIVATE、PROTECTED、STATIC、FINAL),如下(十六进制)

    public static final int<
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您可以使用以下代码来临时修改 `log.isLoggable` 方法的返回值: ```java import java.lang.reflect.Field; import java.util.logging.Level; import java.util.logging.Logger; public class LogModifier { public static void main(String[] args) throws NoSuchFieldException, IllegalAccessException { Logger logger = Logger.getLogger("your_logger_name"); // 替换成您的日志记录器名称 Field field = Logger.class.getDeclaredField("handlers"); field.setAccessible(true); Field modifiersField = Field.class.getDeclaredField("modifiers"); modifiersField.setAccessible(true); modifiersField.setInt(field, field.getModifiers() & ~java.lang.reflect.Modifier.FINAL); field.set(logger, null); logger.setLevel(Level.ALL); // 设置日志记录器级别为全部记录 // 替换成您希望的日志记录级别 int logLevel = Level.INFO.intValue(); // 这里设置为 INFO 级别 Field logLevelField = Logger.class.getDeclaredField("level"); logLevelField.setAccessible(true); logLevelField.set(logger, Level.parse(Integer.toString(logLevel))); // 执行您希望的操作,例如: logger.info("临时修改日志记录级别为 INFO"); // 恢复默认的日志处理器 logger.addHandler(new java.util.logging.ConsoleHandler()); } } ``` 请替换代码中的 `your_logger_name` 为您实际使用的日志记录器名称,并设置 `logLevel` 为您希望的日志记录级别(例如:Level.INFO)。 这段代码通过反射将 `handlers` 字段置为 null,然后设置日志记录器的级别为全部记录,并执行您希望的操作。请注意,这只是一种临时修改日志记录级别的方法,不会永久更改配置。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值