【发布时间】:2019-03-14 17:58:53
【问题描述】:
我在教程中读到,在使用方法引用时,参数必须在功能接口的方法和我们所引用的方法中匹配。 所以我得到以下错误。
public class MethodRefTest
{
public static void m1(int i)
{
System.out.println("Hey in method 1");
}
public static void main(String[] args)
{
Runnable r=MethodRefTest::m1; //Compile time error
}
}
现在我已经明白为什么我会收到这个错误 看下面的代码sn -p
package com;
public class Transaction {
private int id;
private int value;
public Transaction(int id,int value)
{
this.id=id;
this.value=value;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getValue() {
return value;
}
public void setValue(int value) {
this.value = value;
}
}
package com;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
public class MethodRefTest {
public static void main(String[] args)
{
Transaction t1=new Transaction(1,20);
Transaction t2=new Transaction(2,30);
List<Transaction> list=new ArrayList<Transaction>();
list.add(t1);
list.add(t2);
List<Integer> intList=list.stream().map(Transaction::getId).collect(Collectors.toList());
System.out.println(intList);
}
}
在我使用的map方法中,它接受Function FunctionalInterface ...但是我使用的方法引用没有任何参数,但是Function的apply(T t)方法有一个参数,并且getId()没有任何参数,在这种情况下,即使参数不匹配,它也不会抛出任何错误。
请帮助我理解这一点?
【问题讨论】:
标签: java methods lambda reference functional-interface