有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何在异常发生时定位lambda?

假设我有一个比较器工厂,它有许多比较器,由一个λ组成:

   public static Comparator<SomeClass> getXCmp() {
      return (o1, o2) -> {
         Double d1 = Double.parseDouble(o1.getX());
         Double d2 = Double.parseDouble(o2.getX());
         return d1.compareTo(d2);
      };
   }

我用这些比较器对数据进行排序和过滤。 不幸的是,我在某个地方使用了错误的比较器,它导致了ClassCastException,如图所示:

java.lang.ClassCastException: java.lang.Double cannot be cast to java.lang.String
at businesslogic.utility.ComparatorFactory$$Lambda$24/115669291.compare(Unknown Source)
at javax.swing.DefaultRowSorter.compare(DefaultRowSorter.java:968)
...
...

如你所见,它显示了(Unknown Source),这使得我很难找到哪个比较器是错误的。我还试图在比较发生之前添加一个断点(即,在上面的示例中,在DefaulRowSorter.java:968),但next step也无法定位它是哪个lambda(它跳到了错误的比较器,与doublestring无关,当我最终发现错误时,它不是正确的)

在我发现错误后(通过尝试理解整个项目和大量时间),我尝试了一个匿名类。堆栈的回溯明确地告诉了我它在哪里

问:

如果我想让lambda提供简洁的代码,有没有什么好方法可以找到lambda源代码的位置,或者有什么好的实践可以在异常发生时帮助我

A simple example重新产生类似的问题


共 (0) 个答案