2015-11-20 2 views
7

Я хотел бы знать, есть ли способ конвертировать Predicate в String. Например будет функция:Java - Преобразование предиката в строку

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

Так что следующий вызов возвратит (obj) -> obj.value== 1:

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

Есть несколько проектов, которые используют анализ байтового кода для выполнения аналогичных действий: (1) из java-выражений в SQL, (2) для генерации JavaScript из java. Однако это будет огромная работа любви, поскольку в java создается экземпляр анонимного интерфейса. И, конечно, переменные имена должны быть искусственными. –

+0

Нет, вы не можете смотреть и видеть «что внутри» лямбда и ее реализация. –

ответ

6

Нет, в общем, это не представляется возможным в Java. Можно попытаться проанализировать и декомпилировать байт-код класса лямбда (хотя получение байт-кода этого класса уже действительно нетривиальная задача), но такое решение было бы очень сложным и хрупким. Конкретное представление lambda во время выполнения не указано и может изменяться в разных версиях Java или разных поставщиков JDK.

Смежные вопросы