我经常使用如下定义的常量:
private static final int myConstant_x = 1;
private static final int myConstant_y = 2;
private int anyVariable;
anyVariable = myConstant_x
在调试过程中,以某种方式访问日志输出的变量名称而不是值确实很有帮助。
Log.i (TAG,"this is debug output of anyVariable with constant name: " + ????);
与输出:“这是常量名称为 myConstant_x 的任何变量的调试输出”
代替
Log.i (TAG,"this is debug output of anyVariable with constant name: " + anyVariable);
与输出:“这是常量名称为 1 的任何变量的调试输出”
有什么办法吗?
我知道可以从代码中获取方法名称,但是有没有一种方法也可以以某种方式获取变量名称?
真的很有帮助
Thanks
编辑:更新/更正示例代码 - 对于第一个误导版本感到抱歉
您可以使用反射获取类的字段并迭代它们。然后您就可以访问该名称和值。
像这样的事情:
public void logStaticFields( Class<?> clazz) throws IllegalAccessException {
for( Field f : clazz.getDeclaredFields() ) {
if( Modifier.isStatic( f.getModifiers() ) ) {
boolean wasAccessible = f.isAccessible();
f.setAccessible(true);
Log.i (TAG, "this is debug output of static field " + f.getName() + ": " + f.get( null ) );
f.setAccessible( wasAccessible );
}
}
}
如果您只想记录常量(通常是静态最终的),您可以检查Modifier.isStatic( f.getModifiers() ) && Modifier.isFinal( f.getModifiers() )
.
此方法还会暂时禁用访问检查,否则get()
可能会抛出那个IllegalAccessException
。请注意,这可能仍然不起作用,具体取决于您的 JVMSecurityManager
配置。
请注意,这仅适用于字段(类或实例变量)和方法参数,不适用于方法内的局部变量,因为这些变量没有反射信息。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)