Java:1.8

this和super的含义不同

① 在匿名函数中 this 代表类自身,在 lambda 表达式中表示包含类;
② 匿名类可以屏蔽包含类的变量,而 lambda 表达式不能。

int a = 10;
Runnable r1 = () -> {
	int a = 2;   // 编译报错
	System.out.println(a);
Runnable r2 = new Runnable(){
	public void run(){
		int a = 2;   // 正常 覆盖了上面
		System.out.println(a);

假设有这么一个函数式接口:

interface Task{
	public void execute();
public static void doSomething(Runnable r){ r.run(); }
public static void doSomething(Task a){ a.execute(); }

用匿名类实现Task

// 没有歧义
doSomething(new Task() {
	public void execute() {
		System.out.println("Danger danger!!");
});

lambda表达式:

// 存在歧义,到底调用的是Runnable重载方法还是Task重载方法
doSomething(() -> System.out.println("Danger danger!!"));

解决办法:

显示指定:

doSomething((Task)() -> System.out.println("Danger danger!!"));

来自于《Java8实战》
第八章

环境Java:1.8this和super的含义不同① 在匿名函数中this代表类自身,在lambda表达式中表示包含类;② 匿名类可以屏蔽包含类的变量,而lambda表达式不能。int a = 10;Runnable r1 = () -> { int a = 2; // 编译报错 System.out.println(a);};Runnable r2 = new Ru...
浅析匿名函数lambda表达式、闭包(closure)区别与作用   所有的主流编程语言都对函数式编程有支持,比如c++11、python和java中有lambda表达式、lua和JavaScript中有闭包(closure)、ObjectC中有块(blocks,^)。那么这几个概念有什么共性和区别呢,只用普通函数不行吗,为什么要创造这些炫酷的概念呢?   一.匿名函数、lambda、clo...
():(形式参数)->{代码块};形式参数:如果有多个参数,参数之间用逗号隔开;如果没有参数,留空即可; ->:由英文中画线和大于符号组成,写法固定,代表指向动作(箭头后面指向后面要做的事情); { }代码块,看出是方法体中的内容,具体要做的事情; 练习1:带参数无返回值 练习2:无参数有返回值; 练习3:带参数有返回值; 1、所需类型不同。匿名内部类:可以是接口、抽象类、具体类。Lambda表达式:只能是接口 2、使用限制不同。如果接口中有且仅有一个抽象方法,可以使用Lambda表达式,也可以使用匿名内部类。如果接口中多于一个抽象方法,只能使用匿名内部类,而不能使用Lambda表达式 3、实现原理不同。匿名内部类虽然跟使用Lambda效果一样,但是会自动多生成一个....
什么是函数式编程? functional programming: It’s a way of thinking about software construction by creating pure functions. 函数是这种编程思想的根本 因此 Lambda expression在其中有很高的地位。 为啥要引入这些东西呢? 第一个就是简洁。因为匿名函数可以直接在函数内部定义 无需重新在外部定义。 第二个是可以捕获变量–这个是什么? lambda和闭包有什么区别呢? lambda是没有名字的函数
resolution will not be reattempted until the update interval of XXX has elapsed or updates are force 114646
ERROR: Exception when publishing, exception message [Exec timed out or was interrupted after XXX ms 炎黄子孙__: 我是在maven 项目的 PreStep 中想要删除上一次传输的文件,出的错。配置了 Exec in pty 然后执行的指令是: nohup /shell/项目名.sh &> ~/tmp.log & sleep 1 这样就没问题了。 ERROR: Exception when publishing, exception message [Exec timed out or was interrupted after XXX ms 炎黄子孙__: sleep 1 是为了避免和后面的指令发生冲突吧。