首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用Java调用函数输入的方法?

问如何用Java调用函数输入的方法?
EN

Stack Overflow用户
提问于 2019-01-17 18:21:29
回答 3查看 832关注 0票数 0

我有一门课有这样的功能:

代码语言:javascript
复制
public class Entity{
      public void apply(final Function<Item, Item> function) {}
}

怎样用这样的方法打电话?

示例:

代码语言:javascript
复制
Entity entity = new Entity();
entity.apply( ??? );
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-01-17 18:28:02

您需要传递一个Function<Item, Item>,它是一个接受Item并返回Item的函数,假设您有一个类似的方法

代码语言:javascript
复制
class Item {
    Item doThis() {
        return this;
    }
}

你就能做到:

代码语言:javascript
复制
Function<Item, Item> fct = itm -> itm.doThis();
entity.apply(fct);

它的形式是

代码语言:javascript
复制
Function<Item, Item> fct2 = new Function<Item, Item>() {
    @Override
    public Item apply(Item item) {
        return item.doThis();
    }
};
entity.apply(fct);
票数 1
EN

Stack Overflow用户

发布于 2019-01-17 18:29:20

可能会利用Consumer<?>

代码语言:javascript
复制
public class Entity{
    void consumingMethod(Consumer<Object> consumer) {
        consumer.accept(this::methodToConsume)
    }

    void methodToConsume(Object o){
        ....
    }
}

可以用特定类型替换Object,我使用了几种类型,Object对我来说最好

票数 1
EN

Stack Overflow用户

发布于 2019-01-17 18:58:38

您正在使用我们称之为Java中的“泛型”。泛型有助于多态(如您所知),因为它可以在不同的上下文中呈现不同的“类型”,这取决于您希望这些类型是什么。因此,在您的示例中,您可以将一个对象传递给包含您希望泛型的任何类型的方法。下面是泛型类型(函数)作为类的一个示例:

代码语言:javascript
复制
public class Function<T, I> {

}

由于这种类型采用了类型(T和I),所以它本质上是Java中的"Map“。下面是如何创建一个函数类型的对象的示例:

代码语言:javascript
复制
Function<Integer, String> function = new Function<Integer, String>();

下面是如何将这个对象传递给函数的方法:

代码语言:javascript
复制
apply(function);

请注意,您可能需要在函数类中为要用于此泛型的包装器的值创建构造函数。下面是应用方法定义的样子(它不需要是静态的,我这样做只是为了简单,因为我正在创建伪代码。它可以是“实例”(非静态的)方法,如您所提到的):

代码语言:javascript
复制
public static void apply(Function f) {

}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54242031

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档