我需要获取一个唯一的方法标识符作为HashMap的一个键。
我正在尝试使用堆栈跟踪和反射来执行某些操作并使用方法签名。但问题是我没有找到一种方法来检索完整的方法签名(以避免方法重载)。
被修改
我想这样的想法有用:
public class Class1 {
HashMap<String, Object> hm;
public Class1() {
hm = new HashMap<String, Object>();
}
public Object method() {
if (!containsKey()) {
Object value;
...
put(value);
}
return get();
}
public Object method(String arg1) {
if (!containsKey()) {
Object value;
...
put(value);
}
return get();
}
public Boolean containsKey() {
if (hm.containsKey(Util.getUniqueID(2)) {
return true;
} else {
return false;
}
}
public void put(Object value) {
hm.put(Util.getUniqueID(2), value);
}
public Object get() {
String key = Util.getUniqueID(2);
if (hm.containsKey(key) {
return hm.get(key);
} else {
return null;
}
}
}
class Util {
public static String getUniqueID(Integer depth) {
StackTraceElement element = Thread.currentThread().getStackTrace()[depth];
return element.getClassName() + ":" + element.getMethodName();
}
}
但问题是,使用此策略的两种方法将具有相同的ID。
我该如何解决?
答案 0 :(得分:3)
您可以附加+ ":" + element.getLineNumber()
,但您仍然需要担心两条重载方法放在一条长线上的情况。
查看StackTraceElement
方法,似乎不可能通过这种方式获得唯一的方法标识符。此外,我认为代码不是很易读。
我建议您尝试更明确地做
if (hm.containsKey("getValue(int)") {
...
}
或类似的东西。