2015-07-28 11 views
6

Sto cercando una definizione delle parti che si verifica intorno a un lambda in Java 8 stack trace

Ad esempio questo codice

Object inputData = someData(); 

myList.stream().forEach(listItem -> { 

    Query query = (Query) listItem.getSingle().apply(this.getId()); 

    Object data = diffUtils.applyProjection(query, inputData); 

    myStringCollection.stream() 
     .filter(destination -> myPredicateMethod(listItem, destination)) 
     .forEach(destination -> myProcessMethod(destination, data)); 
} 

talvolta produce questa eccezione.

at [CLASS].lambda$null$2([CLASS].java:85) 
at [CLASS]$$Lambda$64/730559617.accept(Unknown Source) 

Quali sono le diverse parti che descrivono nell'eccezione? Che cosa sono "null", "2", "64", "730559617" e "Fonte sconosciuta" che mi dicono?

Qui è possibile trovare un esempio più elaborato (ma qui il "null" nella mia eccezione sopra non è presente). http://blog.takipi.com/the-dark-side-of-lambda-expressions-in-java-8/

+0

Possibile duplicato di [Identificazione lambda in stacktrace in Java 8] (http://stackoverflow.com/questions/29435888/identifying-lambdas-in-stacktrace-in-java-8) –

risposta

3

Non esiste una definizione standard per il nome di classe generato. Questo è intenzionale per evitare che tu scriva codice che dipende da esso, rendendo più difficile per i progettisti modificarlo in seguito.

Ciò detto, quel poco che si può leggere è;

  • la prima parte del nome classe è la classe del sito di chiamata.
  • il numero prima dell'ultimo $ è il contatore globale per lambda. Questo dipende dall'ordine in cui viene generato il codice per lambdas.
  • il numero grande è un ID generato. È diverso per lo stesso lambda ogni volta che si esegue ma non cambia una volta avviato.

La "Fonte sconosciuta" indica che questo codice generato non ha informazioni di debug ad esso associate.

Stiamo cercando una libreria per modificare il toString per un lambda per darti un'idea del codice ad esso associato. cioè assomiglierà al codice del lambda almeno per casi banali.