2015-11-20 34 views
7

Chciałbym wiedzieć, czy istnieje jakikolwiek sposób przekonwertowania Predicate na String. Na przykład nie będzie funkcja:Java - Konwertuj predykat na ciąg

public static <T> String convertPredicate(Predicate<T> objPredicate) { 
    return ?... 
} 

dlatego poniższe wywołanie zwróci (obj) -> obj.value== 1:

convertPredicate((obj) -> obj.value== 1) 
+0

Istnieje kilka projektów, które używają analizy kodu bajtowego do próbowania podobnych rzeczy: (1) z wyrażeń java do SQL, (2) do generowania JavaScript z java. Jednak byłoby to wielkie dzieło miłości, ponieważ anonimowe wystąpienie interfejsu jest generowane w java. A z pewnością nazwy zmiennych muszą być sztuczne. –

+0

Nie, nie można patrzeć i widzieć "co jest w środku" lambda i jego implementacji. –

Odpowiedz

6

Nie, w ogóle nie jest możliwe w Javie. Można próbować analizować i dekompilować kod bajtowy klasy lambda (chociaż uzyskanie kodu bajtowego tej klasy jest już naprawdę nietrywialnym zadaniem), ale takie rozwiązanie byłoby naprawdę skomplikowane i kruche. Określona reprezentacja czasu wykonywania lambda nie jest określona i może zmieniać się w różnych wersjach Java lub różnych dostawcach JDK.