“::”是什么?为什么要使用它?
“::”是Java 8 引入的新特性之一,常常被称作为方法引用,提供了一种不执行方法的方法。使用“::”可以进一步简化一些使用了lambda表达式的代码,让代码更加简洁。
“::”的使用场景和用法
“::”可以省略某些情况的lambda
public class Test01 {
public static void main(String[] args) {
String[] array = {"aaaa", "bbbb", "cccc"};
List<String> list = Arrays.asList(array);
//使用lambda表达式
list.forEach(x-> System.out.println(x));
System.out.println("----------------");
//使用“::”方法引用
list.forEach(System.out::println);
}
}
结果:
对类的静态方法的引用
public class Test02 {
public static void main(String[] args) {
String[] array = {"aaaa", "bbbb", "cccc"};
List<String> list = Arrays.asList(array);
//引用静态方法,通过类名+::+方法名的方式
list.forEach(wy1::print);
}
public static void print(String s){
System.out.println(s);
}
}
对对象的实例方法的引用
public class Test03 {
public static void main(String[] args) {
String arr[]=new String[]{"aaa","bbb","ccc"};
List<String> list = Arrays.asList(arr);
Test03 test03=new Test03();
//引用实例方法,通过对象+::+方法名的方式
list.forEach(test03::print);
}
public void print(String s){
System.out.println(s);
}
}
对父类方法的引用
public class Test04 extends Test04Fu {
public void test() {
String arr[] =new String[]{"aaa","bbb","ccc"};
List<String> list = Arrays.asList(arr);
//引用父类方法,通过super+::+方法名的方式
list.forEach(super::print);
}
}
class Test04Fu{
void print(String s){
System.out.println(s);
}
}
class Test05{
public static void main(String[] args) {
Test04 test04=new Test04();
test04.test();
}
}
引用构造器
public class Test06 {
public void test() {
//引用构造器使用类名::new
InterfaceExample com = Test06::new;
Test06 bean = com.create();
System.out.println(bean);
}
}
interface InterfaceExample{
Test06 create();
}
class Test07{
public static void main(String[] args) {
Test06 test06=new Test06();
test06.test();
}
}
另一种情况是,有参构造器的引用
public class Test08 {
String name;
public Test08(String name) {
this.name = name;
}
public static void main(String[] args) {
//构造器的参数要和接口的参数保持一致,同样使用类名+::+new的方式来引用
Wo wo=Test08::new;
Test08 test08 = wo.creat("hello world");
System.out.println(test08.name);
}
}
interface Wo{
Test08 creat(String name);
}
更多推荐
Java中::的用法
发布评论