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);
}
}
Xin giải thích như thế nàoHãy Giải thích Java 8 Phương pháp tham khảo để dụ Phương pháp sử dụng tên lớp
boolean sameTemp()
tương thích vớifunc()
trong giao diện chức năng.sameTemp()
phương pháp đã được triển khai trênfunc()
trong Giao diện chức năng.count = counter(weekDayHighs, HighTemp::sameTemp, new HighTemp(89));
đang làm việc
Hãy Giải thích Tất cả các điểm riêng biệt.
Mã này hoạt động f ine nhưng tôi không hiểu làm thế nào sameTemp() là tương thích với func(), khi func() có hai tham số và sameTemp() có một. –
bình luận cho tôi nếu bạn không hiểu câu hỏi của tôi –
Bạn có chắc chắn mã này hoạt động không? 'hTemp' được khai báo là' static' nên mỗi khi bạn xây dựng 'HighTemp' giá trị thay đổi cho tất cả các cá thể, điều này sẽ dẫn đến' count' là luôn luôn 0. – MirMasej