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

3

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

我该怎么解决?


将参数的类型添加到您的ID中。 - Simulant
我需要一种单例模式。 - GarouDan
1个回答

3
您可以添加+ ":" + element.getLineNumber(), 但是您仍然需要考虑一个长行上放置两个重载方法的情况。
StackTraceElement方法的角度来看,似乎无法通过这种方式获取唯一的方法标识符。此外,在我看来,代码也不是很易读。
我建议您尝试更加明确地进行处理。
if (hm.containsKey("getValue(int)") {
    ...
}

或类似的东西。

element.getLineNumber() 的问题在于,当我在同一个方法中的下面几行使用另一个方法时,我会得到另一个键。我已经省略了一些内容,但我也想使用 put 方法。也许我需要更明确一些,但如果可能的话,我想避免这种情况。 - GarouDan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接