2
我發現了最終應用程序中確切註釋的類。我需要它,因爲這些註釋在構建過程中被某些jar轉換使用,但這是另一回事。
所以我的問題是爲什麼java.lang.invoke.LambdaForm$Hidden
註釋是運行時註釋?什麼組件使用它?爲什麼?
我發現了最終應用程序中確切註釋的類。我需要它,因爲這些註釋在構建過程中被某些jar轉換使用,但這是另一回事。
所以我的問題是爲什麼java.lang.invoke.LambdaForm$Hidden
註釋是運行時註釋?什麼組件使用它?爲什麼?
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註釋附加框架: