【问题标题】:Android get variable nameAndroid获取变量名
【发布时间】:2015-01-27 09:18:04
【问题描述】:

我想做一个日志方法来帮助处理变量及其值,我想做类似的事情:

void log(Object object) {
    android.util.Log.d("TAG", "The variable " + <One way to get object name here> + " has the value " + object);
}

当我运行这样的事情时:

int hits = 12;
Object obj = null;
String s = "nhe nhe nhem";
log(hits);
log(obje);
log(s);

我想得到以下输出:

The variable hits has the value 12
The variable obj has the value null
The variable s has the value nhe nhe nhem

我只需要一种方法来获取变量名,我不知道 java 中有什么类似的东西,但是如果有人知道一种方法来做到这一点......


编辑

我在 python 中做了一个很好的例子:

myVariableWithSomeFooName = 32

for key, value in list(locals().iteritems()):
    if id(value) == id(myVariableWithSomeFooName):
        itemName = key

print "The " + str(itemName) + " has the value " + str(myVariableWithSomeFooName)

【问题讨论】:

  • 你不是已经得到了如图所示的名字吗..
  • 不,我想得到那个输出,我去纠正问题中的短语
  • 我正在寻找类似问题的解决方案。还没有运气。 ps:“nhe nhe nhem”é bom demais。 rachei o bico。

标签: java android variables


【解决方案1】:

修改方法为:

void log(String varName, Object object) {
    android.util.Log.d("TAG", "The variable " + varName + " has the value " + object);
}

并在调用时发送变量名

int hits = 12;
Object obj = null;
String s = "nhe nhe nhem";
log("hits", hits);
log("obje", obje);
log("s", s);

【讨论】:

  • stackoverflow.com/questions/3959206/… 有人在给出的链接中这样说: 变量的名称是编译时信息,通常不会在编译后存储。如果您使用调试信息进行编译,则会存储变量名称。
  • 其实这不是问题,因为我只想调试。
【解决方案2】:

对象变量实际上只是指向真实对象的指针,所以变量名一般只是编译成一些不可读的混乱。

在我的脑海中,您可以采用两种方法,一种是修改每个对象,您必须拥有另一个包含变量名称的字符串字段,然后可以在您的方法中调用 getter 方法。

另一种(可能更好)方法是将所有变量存储在 HashMap 中。在此数据结构中,对象与字符串配对。因此,您将使用与其变量名相同的字符串将所有对象添加到此 HashMap 中,然后在您的其他方法中调用 hashmap 的 get(Object key) 方法以查找与每个对象一起使用的字符串。

【讨论】:

  • 我想要一些更友好的东西,因为实际上它只是记录日志,我不想创建一个完整的结构,你的解决方案可能有效,但是,在我的情况下更容易创建一个带有两个参数的日志,比如:log("foo", foo);
猜你喜欢
  • 2012-11-13
  • 2021-04-10
  • 2016-03-30
  • 2014-06-20
  • 1970-01-01
  • 1970-01-01
  • 2018-12-20
  • 1970-01-01
  • 2014-02-08
相关资源
最近更新 更多