Bootstrap

Java双冒号语法

原文地址:Java双冒号语法 - 胡太白 - 博客园

双冒号(::)运算符使用(DoubleColon)

其就是对lambda表达式的简写。被用作方法的引用。使用lambda表达式会创建匿名方法,但是有时候需要一个lambda表达式只用于调用一个已经存在的方法,在此才有了方法引用。

  1. 静态方法的引用(static method)
public class Demo {
	@Test
	public void test() {
		List<String> list = Arrays.asList("aaaa", "bbbb", "cccc");
		
		//静态方法语法	ClassName::methodName
		list.forEach(Demo::print);
	}
	
	public static void print(String content){
		System.out.println(content);
	}
}
  1. 对象的实例方法引用。
public class Demo {
	@Test
	public void test() {
		List<String> list = Arrays.asList("aaaa", "bbbb", "cccc");
		
		//静态方法语法	ClassName::methodName
		list.forEach(new Demo()::print);
	}
	
	public void print(String content){
		System.out.println(content);
	}
}
  1. 对象的超类方法引用
public class Example extends BaseExample{

	@Test
	public void test() {
		List<String> list = Arrays.asList("aaaa", "bbbb", "cccc");
		
		//对象的超类方法语法: super::methodName 
		list.forEach(super::print);
	}
}

class BaseExample {
	public void print(String content){
		System.out.println(content);
	}
}
  1. 类构造器引用
public class Example {

	@Test
	public void test() {
		InterfaceExample com =  Example::new;
		Example bean = com.create();
        Example bean = com.create("STRING");
		System.out.println(bean);
	}
}

interface InterfaceExample{
    //不带参数
	Example create();
    //带参数
    Example create();
}
  1. 数组构造器引用
public class Example {
	public static void main(String[] args) {
		Function <Integer, Example[]> function = Example[]::new;
		Example[] array = function.apply(4);	//这里的4是数组的大小
		
		for(Example e:array){
			System.out.println(e);	//如果输出的话,你会发现会输出4个空对象(null)
		}
	}
}

;