public interface MyFunc<T> {
boolean func(T v1, T v2);
}
public class HighTemp {
private int hTemp;
HighTemp(){
}
public HighTemp(int ht) {
this.hTemp = ht;
}
boolean sameTemp(HighTemp ht2){
return hTemp == ht2.hTemp;
}
boolean lessThanTemp(HighTemp ht2){
return hTemp < ht2.hTemp;
}
}
class InstMethWithObjRef {
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;
//Create an array of HighTemp objects.
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::lessThanTemp,new HighTemp(89));
System.out.println(count);
}
}
Proszę wyjaśnić, w jaki sposóbproszę wyjaśnić Java 8 metody referencyjnej do instancji metoda z użyciem nazwy klasy
boolean sameTemp()
jest kompatybilny zfunc()
w interfejsie funkcjonalne.sameTemp()
metoda została zaimplementowana nafunc()
w interfejsie funkcjonalnym.count = counter(weekDayHighs, HighTemp::sameTemp, new HighTemp(89));
pracuje
proszę wyjaśnić wszystkie punkty oddzielnie.
Ten kod działa na ale nie rozumiem, w jaki sposób metoda ta jest zgodna z func(), kiedy func() ma dwa parametry, a ten sam atrybut() ma. –
skomentuj, jeśli nie rozumiesz mojego pytania –
Czy na pewno działa kod? 'hTemp' jest zadeklarowany jako 'static', więc za każdym razem gdy skonstruujesz' HighTemp', wartość zmieni się dla wszystkich instancji, co spowoduje, że 'count' będzie zawsze 0. – MirMasej