Hi,
I have a proposal for a new feature:
I would like to have an annotation @PartialEvaluation for methods with multiple arguments.
An annotated method gets an overloaded version expecting all but one of the original input arguments. The result of the generated method is a lambda expression that expects the last of the input arguments and finally executes the original method with the full set of arguments.
Example
public class Example {
@PartialEvaluation(variable = "str")
public String addPrefix(String prefix, String str) {
return prefix + str;
}
@PartialEvaluation(variable = "someText")
public boolean isTooLong(String someText, int maxLength) {
return someText.length() > maxLength;
}
}
Generated Code
public class Example {
public String addPrefix(String prefix, String str) {
return prefix + str;
}
public boolean isTooLong(String someText, int maxLength) {
return someText.length() > maxLength;
}
// Generated
public Function<String, String>
addPrefix(String prefix) {
return (str) -> this.addPrefix(prefix, str);
}
public Predicate<String>
isTooLong(int maxLength) {
return (someText) -> this.isTooLong(someText, maxLength);
}
}
Benefit
It can be applied for example in Streams:
List<String> values = List.of("abcd", "12345678", "Some important text");
// now
List<String> resultList = values.stream()
.filter(value -> isTooLong(value, 5))
.map(value -> addPrefix("prefix_", value))
.toList();
// with @PartialEvaluation
List<String> resultList = values.stream()
.filter(isTooLong(5))
.map(addPrefix("prefix_"))
.toList();
What du you think about my idea?
Best regards,
Philipp