Добро пожаловать в Java и ее проблемы.
interface Function<T> {
public T eval(T argument);
}
class Lazy<T> {
private Iterator<T> source;
private Function<T> filter;
Lazy(final Iterator<t> source, final Function<T> filter) {
this.source = source;
this.filter = filter;
}
public T step() {
return filter.eval(source.next());
}
}
Коллекции Google имеют тип Function
, метод Functions.compose (Function, Function)
, метод Iterables.transform (Iterable, Function)
метод и многое другое.
Бесполезно для вас, если это для домашнего задания (я действительно хочу, чтобы все раскрыли, когда их вопрос связан с домашним заданием).
В Java вы всегда делаете это с помощью протокола класса. См. java.lang.Thread
и функцию run для канонического примера. В Java нет «указателей на функции» или «переменных функций».
FWIW, эквивалент «указателя на функцию» в Java - это интерфейс с одним методом. Вы реализуете интерфейс с помощью некоторого класса, который обеспечивает реализацию метода, а затем сохраняете ссылку на этот объект класса.
Изменение ссылки на другой объект класса, реализующий метод по-другому, эквивалентно изменению указателя функции чтобы указать на другую функцию.
public static <T> void apply(final List<T> list, final Function<T> func)
{
for(final T val : list)
{
func.perform(val);
}
}
interface Function<T>
{
void apply(T value);
}
class DisplayFunction<T>
implements Function<T>
{
public void perform(T value)
{
System.out.println(value);
}
}
вызов применить (список, новая функция DisplayFunction ());