是否可以根据在java中调用它的位置在方法中执行不同的代码?

时间:2013-03-07 14:25:06

标签: java

我正在浏览API并尝试使用Google搜索,但我想我无法正确地说出来或者说它不可能。我的问题是:是否有可能让一个方法根据它的调用位置执行特定的代码序列?

3 个答案:

答案 0 :(得分:4)

你可以get the current stacktrace并从那种称为当前方法的方法中找出答案。

这看起来非常脏,所以你应该确保你的用例实际上保证了这种方法,而不是仅仅在方法中添加参数或创建不同的方法。

答案 1 :(得分:3)

它看起来像是继承和两个不同实现的好地方

答案 2 :(得分:3)

是的,这是可能的。但这可能是一个坏主意。

实现这种目标的一种方法是这样的:

public void myMethod(...) {
    Exception ex = new Exception();
    StackTraceElement caller = ex.getStackTrace()[1];
    if (caller.getMethod().equals("someMethod") {
        // do this 
    } else {
        // do that
    }
}

StackTraceElement给出方法的名称,声明类的名称,以及可用时源文件的名称和源行号。

有几个原因可以解释为什么这是一个坏主意:

  • 这种东西往往很脆弱。很难预先确定调用方法的位置,并且很难预测未来某个时间可能由其他开发人员进行的更改。
  • 构建堆栈跟踪数组是很昂贵的,特别是如果堆栈很深的话。
  • 它违反了“最不出意外”的规则。开发人员不希望方法表现得那样。
  • 很可能有更好的方法......无论你想要达到什么目的。