Java / Eclipse - 用于指定当前方法名称的宏?

时间:2013-05-24 18:45:49

标签: eclipse blackberry java-me

我正在使用eclipse并希望在编译之前有一个“宏”,预处理器将替换为当前方法的名称。

我有一个错误报告函数,称为:reportthis(String errormessage) - 整个应用程序中的不同函数都有try / catch块,在出错时从catch块调用reportthis(...)。

我希望能够指定类似reportthis(MACRO_CURRENT_METHOD_NAME + ":" + e.ToString());的内容 - 其中MACRO_CURRENT_METHOD_NAME将在编译之前由eclipse预处理,并导致catch {}块调用reportthis的方法的名称( )。

因此,如果catch {}块发生在main()中,则宏应该返回字符串“main”(或“main()”等)。

这可能吗?我如何实现目标?

谢谢!

修改 我希望Eclipse中的预处理器能够完成这一切 - 那些不可能吗?是不是可能为eclipse编写一个插件来用当前函数名替换所有出现的“MACRO_CURRENT_METHOD_NAME”?

3 个答案:

答案 0 :(得分:2)

我没有找到一种自动执行此操作的方法,因此手动添加了一个字符串文字,指示每次调用日志代码时调用者的名称。

诺基亚的S40平台也基于Java-ME,我知道一些诺基亚S40开发人员已经很好地利用Jarrut, which is available on Sourceforge,通过修改程序来跟踪堆栈来产生堆栈跟踪。您可以利用此功能在日志记录代码中获取调用函数名称,但您可能需要稍微修改Jarrut才能使其工作。

答案 1 :(得分:1)

Java不支持宏。 但是你可以做些什么来确定当前的方法就像

  final StackTraceElement aTop = Thread.currentThread ().getStackTrace ()[1];
  System.out.println (aTop.getMethodName ());

通过使用index [1]处的元素,您将获得调用方法,因为[0]处的元素是Thread.getStackTrace()。 如果将此代码包装在另一个方法中,则必须采用数组索引,例如到2,取决于您使用的包装方法的数量。

答案 2 :(得分:0)

java中没有预处理器,也没有宏语言。

虽然有些情况下可能有用,但如果我理解您的问题则完全没有意义,因为异常的堆栈跟踪已经包含类和方法发生豁免的地方。

不要将String传递给“reportthis()”,而是创建一个只接受异常并打印它的签名(或者只写e.printStackTrace())。