方法引用是对lambda的进一步简化,如果方法体只有一个方法调用的话,可以直接采用对象名(类名)::方法名的格式(想起来了C++的一些语法)
一个例子:上面是lambda的一种写法,下面是方法引用的改进
int[] arr = {-1, 2, 3, 4, 5, 6}; Arrays.stream(arr).forEach(a-> System.out.println(a)); Arrays.stream(arr).forEach(System.out::println);
引用类的静态方法/对象的实例方法的使用前提:重写的方法中,方法体只有一行代码,并且这行代码是调用了某个类的静态方法/某个对象的成员方法,抽象方法中的所有参数已经按照顺序传入了这个静态方法中。
引用类的实例的方法的使用前提:重写的方法中,方法体只有一行代码,这行代码是调用了第一个参数的成员方法,抽象方法中的所有参数已经按照顺序传入了这个静态方法中。有些难懂,附上一个例子
interface UseString { String use(String str, int start, int length); } public static String subAuthorName(String str, UseString useString) { int start = 0; int length = 1; return useString.use(str, start, length); } public static void main(String[] args) { subAuthorName("天启A", new UseString() { @Override public String use(String str, int start, int length) { return str.substring(start,length); } });
}
上述main中的方法只要替换成subAuthorName("天启A", String::substring);即可
构造器引用的使用前提:重写的方法中,方法体只有一行代码,这行代码是调用了某个类的构造方法,抽象方法中的所有参数已经按照顺序传入了这个构造方法中
//注意 上一个stream是string类型 name->new StringBuilder(name) StringBuilder::new
标签:java,String,int,start,length,引用,str,方法 From: https://www.cnblogs.com/kun1790051360/p/17929331.html