2017-05-27 82 views
2

我發現了最終應用程序中確切註釋的類。我需要它,因爲這些註釋在構建過程中被某些jar轉換使用,但這是另一回事。

所以我的問題是爲什麼java.lang.invoke.LambdaForm$Hidden註釋是運行時註釋?什麼組件使用它?爲什麼?

回答

3

JVM運行時使用它來隱藏堆棧跟蹤中的lambda相關幀。就拿這個例子:

public class LambdaStackTrace 
{ 
    public static void main(String[] args) throws Exception 
    { 
     "a".chars().forEach(c -> { 
      new Error().printStackTrace(); 
     }); 
    } 
} 

它會產生這種堆棧跟蹤:

java.lang.Error 
    at LambdaStackTrace.lambda$0(LambdaStackTrace.java:6) 
    at java.lang.CharSequence$1CharIterator.forEachRemaining(CharSequence.java:149) 
    at java.util.Spliterators$IntIteratorSpliterator.forEachRemaining(Spliterators.java:1908) 
    at java.util.stream.IntPipeline$Head.forEach(IntPipeline.java:557) 
    at LambdaStackTrace.main(LambdaStackTrace.java:5) 

但如果看看在調試器幀堆棧它會告訴你它具有@Hidden註釋附加框架:

enter image description here

相關問題