このメソッド参照構文について少し混乱します。2つの引数のメソッド参照に関する混乱
counter()
はBiFunction
しかしHighTemp::lessThanTemp
を期待HighTemp.lessThanTemp()
が一つだけの引数を取るにもかかわらず、有効な引数です。
正確に何が起こっていますか:if (f.func(vals[i], v))
?
MCVE:
import java.util.function.BiFunction;
class Demo {
static class HighTemp {
private int hTemp;
HighTemp(int ht) { hTemp = ht; }
boolean lessThanTemp(HighTemp ht2) {
return hTemp < ht2.hTemp;
}
}
static <T> int counter(T[] vals, BiFunction<T,T,Boolean> f, T v) {
int count = 0;
for (int i=0; i < vals.length; i++) {
if (f.apply(vals[i], v)) { // THIS LINE
count++;
}
}
return count;
}
public static void main(String args[]) {
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) };
int count = counter(weekDayHighs2, HighTemp::lessThanTemp, new HighTemp(19));
System.out.println(count + " days had a high of less than 19");
}
}
ヒント:代わりに、独自の 'MyFunc'インタフェースを定義する、[' BiFunction'](https://docs.oracleを使用.com/javase/8/docs/api/java/util/function/BiFunction.html)またはそのサブタイプ['BinaryOperator'](https://docs.oracle.com/javase/8/docs/api/java/ util/function/BinaryOperator.html)。 – dimo414
@ dimo414コンパイル結果は「5日間が19日未満」です。 これは実際にどのように動作するのか混乱しています – KuKKi
@JimGarrison 'f.func(vals [i]、v)'は2つの引数をとりますが、f.funcは 'HighTemp :: lessThanTemp'これは1つの議論しか取らない。 'boolean lessThanTemp(HighTemp ht2)' – KuKKi