美文网首页
Java将方法作为参数传递

Java将方法作为参数传递

作者: 佑岷 | 来源:发表于2020-04-03 18:27 被阅读0次

最近在用Java写一套自研爬虫框架,该框架可以通过简单的配置就可以实现目标网站的抓取,不再需要研发人员做开发,业务人员也能抓目标网站哦,有兴趣可以私聊。

为了抽象化需要将用户自定义方法传递给框架,供框架回调。
研究了下发现1.8版新特效lambda表达式配合java.util.function.Function<T, R>可以实现。
java.util.function.Function<T, R>中的T、R,需要结合这个interface的方法R apply(T t)来看, T是输入参数类型,R是返回参数类型。

实例分析

流程:将自定义方法传递到Request对象,当request对象获取response后,回调自定义方法。

实例分析:

import java.util.function.Function;
public class Cb {
    public static class Response {
        private String html;
        public Response(String html) { this.html = html; }
        public String getHtml() { return html; }
    }
    public static class Request {
        private Function<Response, Object> callback;
        public Request(Function<Response, Object> callback) { this.callback = callback; }
        public Function<Response, Object> getCallback() { return callback; }
    }
    public static class Engine {
        private Request request;
        public void setRequest(Request request) { this.request = request; }
        public void run() {
            Object o = request.getCallback().apply(new Response("I like moving, moving"));
            System.out.println(o);
        }
    }
    public static void main(String[] args) {
        Engine engine = new Engine();
        engine.setRequest(new Request(response -> returnHtml(response))); engine.run();
        engine.setRequest(new Request(response -> returnHtmlb(response))); engine.run();
        engine.setRequest(new Request(response -> returnHtmlc(response))); engine.run();
    }
    public static Object returnHtml(Response response) { return response.getHtml(); }
    public static Object returnHtmlb(Response response) { return response.getHtml() + " bb"; }
    public static Object returnHtmlc(Response response) { return response.getHtml() + " ccc"; }
}

Lambda搭配Function<T, R>调用时的写法response -> selfFunction(response);

Ok~

相关文章

  • Java将方法作为参数传递

    最近在用Java写一套自研爬虫框架,该框架可以通过简单的配置就可以实现目标网站的抓取,不再需要研发人员做开发,业务...

  • java8之行为参数化,你用了吗?

    java8之行为参数化,你用了吗? java8新增加了方法引用::语法(将方法作为参数)。将方法的引用传递进去,可...

  • Java 8、Java 9、Java 10 新特性

    Java8 Lambda 表达式:Lambda允许把函数作为一个方法的参数(函数作为参数传递进方法中。 方法引用 ...

  • JAVA是按值传递还是按引用传递

    java中对象作为参数传递给一个方法,到底是值传递,还是引用传递? String和int参数传递是按值传递还是引用...

  • Java各版本新特性总结

    Java 8 新特性 Lambda 表达式 − Lambda 允许把函数作为一个方法的参数(函数作为参数传递到方法...

  • JAVA interface 将接口作为参数传递的方法

    1.什么是接口? 接口是Java编程语言中的一种抽象类型,是抽象方法的集合,通常以interface来声明,所以接...

  • Kotlin 和 Java 关于局部变量的区别

    众所周知,在 Java 方法内将局部变量作为参数传递到方法后,如果该参数是基本数据类型,那内部的赋值修改不会同步到...

  • JAVA8

    java8新特性:#### 1,lambda,也称为闭包,允许把函数作为一个方法的参数(函数作为参数传递进方法中)...

  • 函数式接口和Java8的lambda表达式

    0x00 JS中的闭包以及Java中替代方法 在Java中,是不允许将一个方法作为参数传递给另一个函数,也不允许将...

  • 第二课 js类和对象

    函数 js中函数可以作为参数传递 第一种写法 上面代码是将say方法作为参数传递给execute方法 第二种写法 ...

网友评论

      本文标题:Java将方法作为参数传递

      本文链接:https://www.haomeiwen.com/subject/eczhphtx.html