福建体彩网开奖现场
欢迎访问昆山宝鼎软件有限公司网站! 设为首页 | 网站地图 | XML | RSS订阅 | 宝鼎邮箱 | 后台管理
?

新闻资讯

MENU

软件开发知识

JDK 8 见证了一个特殊特性 图纸加密 的出现:构造函数引用和方法引用

点击: 次  来源:宝鼎软件 时间:2018-12-20

本文由 ImportNew - Mr.Dcheng 翻译自 jaxenter。接待插?#22336;?#35793;小组。转载请见文末要求。

JDK 8 见证了一个非凡特性的呈现:结构函数引用和要领引用。在本文中, Adrian D. Finlay 探讨了开拓人员如何释放结构函数引用的真正潜力。

要领引用的一些配景

假如你还不知道 Java 结构函数自己就是非凡的要领,那么阅读要领引用的根基示例将对读者有所辅佐,昆山软件开发,通过相识这些内容,可以相识结构函数引用是什么。

「要领引用为已经有名称的要领提供易读的 lambda 表达式。」

「它们提供了一种无需执行就可以引用要领的简朴方法。」

以上引自《Java 8 编程参考官方教程(第 9 版)》,作者:Herbert Schildt

译注:该书的第 8 版中文译本名称为:《Java 完全参考手册(第 8 版)》,第 9 版中文译本名称为:《Java 8 编程参考官方教程(第 9 版)》

要领引用可以引用静态要领和?#36947;?#35201;领,两者是通用的。要领引用是函数式接口的?#36947;?#22266;然 Lambda 表达式答允你动态建设要领实现,但凡是环境下,一个要领最终会挪用 Lambda 表达式中的另一个要领来完成我们想要完成的事情。更直接的要领是利用要领引用。当你已经有一个要领来实现这个函数式接口时,这长短常有用的。

让我们看一个利用静态要领及?#36947;?#35201;领的示例。

//step #1 - Create a funnctional interface.
interface FuncInt {
    //contains one and only abstract method
    String answer(String x, boolean y);
}

//step #2 - Class providing method(s)that match FuncInt.answer()'s definition.
class Answer {
    static String ans_math_static(String x, Boolean y) {
        return "\"" + x + "\"" + "\t = \t" + y.toString().toUpperCase();
    }

    String ans_math_inst(String x, Boolean y) {
        return "\"" + x + "\"" + "\t = \t" + y.toString().toUpperCase();
    }
}

译注:以上代码的测试用譬喻下,因静态要领与?#36947;?#35201;领功效沟通,仅以静态要领为例。

Answer.ans_math_static("9 > 11 ?", false);
Answer.ans_math_static("987.6 < 1.1 ?", false);
Answer.ans_math_static("1 > 0.9 ?", true);
Answer.ans_math_static("T/F: Is Chengdu in Sichuan?", true);
Answer.ans_math_static("-1 % 0.2=0 ?", false);
Answer.ans_math_static("T/F: Does Dwyne Wade play for the Knicks?", false);

获得与原文举例沟通的输出功效:

"9 > 11 ?"	 = 	FALSE
"987.6 < 1.1 ?"	 = 	FALSE
"1 > 0.9 ?"	 = 	TRUE
"T/F: Is Chengdu in Sichuan?"	 = 	TRUE
"-1 % 0.2=0 ?"	 = 	FALSE
"T/F: Does Dwyne Wade play for the Knicks?"	 = 	FALSE

另请参阅:关于var的所有内容:局部变量范例揣度如何排除Java代码冗余

利用要领引用的主要步调有:

  1. 界说一个函数式接口
  2. 界说一个满意函数式接口抽象要领要求的要领
  3. 利用对步调2中界说的?(x :: y ) 要领引用?#36947;?#21270;函数式接口的?#36947;?br /> 译注:静态要领的要领引用名目为?类名 :: 要领名?;?#36947;?#35201;领的要领引用名目为?工具?#36947;?#21517; :: 要领名?。
  4. 利用函数式接话柄例挪用要领:?Instance.AbstractMethod();

这提供了一?#32440;?#35774;要领实现的可插拔方法。Lambda 表达式和要领引用为 Java 编程带来了一个成果方面的晋升。

另请参阅:你到底有多相识Java的注解?

结构函数的要领引用

让我们开始具体接头吧。

结构函数和其他要领一样是要领。对吗?#30475;懟?#23427;们有点非凡,它们是工具初始化要领。尽量如此,它们仍然是一个要领,没有什么能阻止我们像其他要领引用一样建设结构函数的要领引用。

//step #1 - Create a funnctional interface.
interface FuncInt {
    //contains one and only abstract method
    Automobile auto(String make, String model, short year);
}

//step #2 - Class providing method(s)that match FuncInt.answer()'s definition.
class Automobile {

    //Trunk Member Variables
    private String make;
    private String model;
    private short year;

    //Automobile Constructor
    public Automobile(String make, String model, short year) {
        this.make = make;
        this.model = model;
        this.year = year;
    }

    protected void what() {
        System.out.println("This Automobile is a" + year + " " + make + " " + model + ".");
    }
}

//Step #3 - Class making use of method reference
public class ConstrRef {

    static void createInstance() {
    }

    public static void main(String[] args) {
        System.out.println();

        //Remember, a Method Reference is an instance of a Functional Interface. Therefore....
        FuncInt auto = Automobile::new;//We really don't gain much from this example

        //Example #1
        Automobile honda = auto.auto("honda", "Accord", (short) 2006);
        honda.what();

        //Example #1
        Automobile bmw = auto.auto("BMW", "530i", (short) 2006);
        bmw.what();

        System.out.println();
    }
}

输出功效

This Automobile is a2006 honda Accord.
This Automobile is a2006 BMW 530i.

?#24471;?/p>

福建体彩网开奖现场
股票k线图 好的股票融资公司 三种股票分析方法 贵阳抓鸡麻将下载安 十分快乐 飞艇微信群公众号 专炒一只股票的股民 血流麻将新手入门 西甲排行 北京龙跃股票配资加盟