我有一门课有这样的功能:
public class Entity{
public void apply(final Function<Item, Item> function) {}
}怎样用这样的方法打电话?
示例:
Entity entity = new Entity();
entity.apply( ??? );发布于 2019-01-17 18:28:02
您需要传递一个Function<Item, Item>,它是一个接受Item并返回Item的函数,假设您有一个类似的方法
class Item {
Item doThis() {
return this;
}
}你就能做到:
Function<Item, Item> fct = itm -> itm.doThis();
entity.apply(fct);它的形式是
Function<Item, Item> fct2 = new Function<Item, Item>() {
@Override
public Item apply(Item item) {
return item.doThis();
}
};
entity.apply(fct);发布于 2019-01-17 18:29:20
可能会利用Consumer<?>
public class Entity{
void consumingMethod(Consumer<Object> consumer) {
consumer.accept(this::methodToConsume)
}
void methodToConsume(Object o){
....
}
}可以用特定类型替换Object,我使用了几种类型,Object对我来说最好
发布于 2019-01-17 18:58:38
您正在使用我们称之为Java中的“泛型”。泛型有助于多态(如您所知),因为它可以在不同的上下文中呈现不同的“类型”,这取决于您希望这些类型是什么。因此,在您的示例中,您可以将一个对象传递给包含您希望泛型的任何类型的方法。下面是泛型类型(函数)作为类的一个示例:
public class Function<T, I> {
}由于这种类型采用了类型(T和I),所以它本质上是Java中的"Map“。下面是如何创建一个函数类型的对象的示例:
Function<Integer, String> function = new Function<Integer, String>();下面是如何将这个对象传递给函数的方法:
apply(function);请注意,您可能需要在函数类中为要用于此泛型的包装器的值创建构造函数。下面是应用方法定义的样子(它不需要是静态的,我这样做只是为了简单,因为我正在创建伪代码。它可以是“实例”(非静态的)方法,如您所提到的):
public static void apply(Function f) {
}https://stackoverflow.com/questions/54242031
复制相似问题