Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java函数接口自动将第一个参数指定为类?_Java_Lambda_Functional Programming - Fatal编程技术网

Java函数接口自动将第一个参数指定为类?

Java函数接口自动将第一个参数指定为类?,java,lambda,functional-programming,Java,Lambda,Functional Programming,函数接口定义了采用2个参数的方法MyFunc,但当此方法在HighTemp类中实现时,出于某种原因,它只有1个参数,并且使用f.func(vals[i],v)调用它,该函数如何调用此方法布尔sameTemp(HighTemp ht2),我错过了什么 interface MyFunc<T> { boolean func(T v1, T v2); } class HighTemp { private int hTemp; HighTemp(int ht) {

函数接口定义了采用2个参数的方法MyFunc,但当此方法在HighTemp类中实现时,出于某种原因,它只有1个参数,并且使用
f.func(vals[i],v)
调用它,该函数如何调用此方法
布尔sameTemp(HighTemp ht2)
,我错过了什么

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;
    }
}

public class InstanceMethObjectRefDemo {
    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 then 19");
    }
}
接口MyFunc{
布尔函数(T v1,T v2);
}
类高温{
私有int hTemp;
高温(int-ht){hTemp=ht;}
布尔sameTemp(高温ht2){
返回hTemp==ht2.hTemp;
}
布尔lessThanTemp(高温ht2){
返回hTemp
高温::sameTemp相当于:

(HighTemp t1, HighTemp t2) -> t1.sameTemp(t2);

HighTemp::sameTemp
相当于:

(HighTemp t1, HighTemp t2) -> t1.sameTemp(t2);

对不起,我不太清楚你在问什么。你能重新措辞吗?是的,但是“boolean sameTemp(HighTemp ht2)”需要1个参数,用2个参数调用此方法如何正确?可能会问为什么方法引用在构造函数中工作?你能编辑你的代码使
计数器大写吗?因为这可能会使人们比你想象的更难阅读。请具体说明你认为哪些行/表达有问题。对不起,我不完全清楚你在问什么。你能重新措辞吗?是的,但是“boolean sameTemp(HighTemp ht2)”需要1个参数,用2个参数调用此方法如何正确?可能会问为什么方法引用在构造函数中工作?你能编辑你的代码使
计数器大写吗?因为这可能会使人们比你想象的更难阅读。并明确哪些行/表达式是您认为可能存在问题的