如何获得唯一的方法标识符?

时间:2014-10-17 12:28:59

标签: java methods uniqueidentifier

我需要获取一个唯一的方法标识符作为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。

我该如何解决?

1 个答案:

答案 0 :(得分:3)

您可以附加+ ":" + element.getLineNumber(),但您仍然需要担心两条重载方法放在一条长线上的情况。

查看StackTraceElement方法,似乎不可能通过这种方式获得唯一的方法标识符。此外,我认为代码不是很易读。

我建议您尝试更明确地做

if (hm.containsKey("getValue(int)") {
    ...
}

或类似的东西。