내가 자바에서 람다 표현식을 사용하여 다음과 같은 방법 참조 코드를 이해하려고 해요 매개 변수 :자바 람다 표현식
interface MyFunc<T> {
boolean func(T v1, T v2);
}
class HighTemp {
private int hTemp;
HighTemp(int ht) {
hTemp = ht;
}
boolean sameTemp(HighTemp ht2) {
return hTemp == ht2.hTemp;
}
boolean lessThanTemp(HighTemp ht2) {
return hTemp < ht2.hTemp;
}
}
class InstanceMethWithObjectRefDemo {
static <T> int counter(T[] vals, MyFunc<T> f, T v) {
int count = 0;
for (int i = 0; i < vals.length; i++) {
if (f.func(vals[i], v)) {
count++;
}
}
return count;
}
public static void main(String args[]) {
int count;
HighTemp[] weekDayHighs = {new HighTemp(89), new HighTemp(82),
new HighTemp(90), new HighTemp(89),
new HighTemp(89), new HighTemp(91),
new HighTemp(84), new HighTemp(83)};
count = counter(weekDayHighs, HighTemp::sameTemp,
new HighTemp(89));
System.out.println(count + " days had a high of 89");
HighTemp[] weekDayHighs2 = {new HighTemp(32), new HighTemp(12),
new HighTemp(24), new HighTemp(19),
new HighTemp(18), new HighTemp(12),
new HighTemp(-1), new HighTemp(13)};
count = counter(weekDayHighs2, HighTemp::sameTemp,
new HighTemp(12));
System.out.println(count + " days had a high of 12");
count = counter(weekDayHighs, HighTemp::lessThanTemp,
new HighTemp(89));
System.out.println(count + " days had a high less than 89");
count = counter(weekDayHighs2, HighTemp::lessThanTemp,
new HighTemp(19));
System.out.println(count + " days had a high of less than 19");
}
}
내 질문입니다, 기능 sameTemp는 하나 개의 매개 변수가있는 이유는 무엇입니까? 인터페이스는 2 개의 매개 변수를 가져야한다는 것을 선언하므로 이해가되지 않습니다. 어쩌면 hTemp 인스턴스 변수로 둘 다 충분할 수 있습니까? 나는 자바에서 전체 참조 책이했다 거기에 저자는이 설명 : sameTemp( )
및 lessThanTemp( )
:
인용문을
를 프로그램에서 HighTemp 두 개의 인스턴스 메소드를 가지고 있음을 알 수 있습니다. 두 개의 HighTemp 객체가 동일한 온도를 포함하면 첫 번째 객체는 true를 반환합니다. 호출하는 객체의 온도가 전달 된 객체의 온도보다 작 으면입니다. 각 메소드는 HighTemp 유형의 매개 변수를 가지며 각 메소드는 부울 결과를 반환합니다. 따라서 호출 객체 유형을func( )
의 첫 번째 매개 변수로 매핑하고 인수를func( )
의 두 번째 매개 변수로 매핑 할 수 있기 때문에 각각은 MyFunc 기능 인터페이스 과 호환됩니다.
고마워요!
참조 http://stackoverflow.com/questions/32855138/how-does-a-method-reference-to-an-instance-method-of-an-arbitrary- object-of-ap 및 http://stackoverflow.com/questions/23139725/using-method-reference-instead-of-multi-argument-lambda 및 http : // stackoverflow.com/questions/22516331/whats-the-difference-instance-method-reference-types-in-java-8 (및 http://stackoverflow.com/questions/37037015/why-stringbuilderappend-is-biconsumerstringbuilder-string) – Tunaki