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);
}
}
请解释一下
boolean sameTemp()
与func()
功能界面兼容。sameTemp()
方法已func()
在功能接口中实现。count = counter(weekDayHighs, HighTemp::sameTemp, new HighTemp(89));
正在工作请单独解释所有要点。
__HighTemp::lessThanTemp
is的 等效 lambda表达式
(highTemp1, highTemp2) -> {
return highTemp1.lessThanTemp(highTemp2);
}
这是
特定类型的任意对象的实例方法的Java8
命名
引用
的功能之一。
__
考虑以下示例,
interface FIface<T> {
int testMethod(T a, T b);
}
class Test2 {
private String str;
Test2(String str) {
this.str = str;
}
int ok(Test2 test2) {
System.out.println("Currnet String : "+ this.str);//Refer to t1
System.out.println("Test String : "+test2.str);//Refer to t2
return 0;
}
}
public class Test {
public static <T> int checkCall(T t1, T t2, FIface<T> fiFace) {
//Here Test2 :: ok is equivalent to t1.ok(t2)
return fiFace.testMethod(t1, t2);
}
public static void main(String[] args) {
checkCall(new Test2("a"), new Test2("b"), Test2 :: ok);
}
}
输出值
Currnet String : a
Test String : b
请注意,这Test2 :: ok
对于call even ok
方法不是静态的有效。
当你调用该方法checkCall
的功能界面,你仍然有两个参数,其是t1
与t2
并为有效的lambda表达式可以有参数,(Test t1, Test t2)
所以你的方法Test2 :: ok
这里成为有效的呼叫。在内部它以这种方式工作t1.ok(t2)
。
因此,fiFace.testMethod(t1, t2);
将调用方法为t1.ok(t2)
本文向大家介绍使用Java8中的方法引用来引用实例方法,包括了使用Java8中的方法引用来引用实例方法的使用技巧和注意事项,需要的朋友参考一下 Java中的Lambda表达式使您可以将功能作为参数传递给方法。您也可以使用lambda表达式调用现有方法。 方法引用是简单,易于阅读的lambda表达式,可通过lambda表达式中的名称来调用/引用和现有方法。 语法 以下是在Java中引用实例方法的语法
我正在通过一个例子,它从与方法引用相关的当前目录中提取一个隐藏文件数组,如下所述 使用匿名内部类实现 使用方法参考实现 我的问题是接口只有一个抽象方法(),而实现accept-method-using-method-reference在类中使用的有效性如何。我了解到,只有当参数与抽象方法匹配时,我们才能应用方法引用,但是这里method有一个类型的参数,但是没有参数。你能解释一下它的有效性吗。
主要内容:1 Java8 方法引用的介绍,2 Java8 方法引用的分类,3 Java8 方法引用:引用静态方法,4 Java8 方法引用:引用实例方法,5 Java8 方法引用:引用构造方法1 Java8 方法引用的介绍 Java提供了一个新功能,称为Java 8中的方法引用。方法引用用于引用功能接口的方法。它是lambda表达式的紧凑和简单形式。每次使用lambda表达式仅引用方法时,都可以将lambda表达式替换为方法引用。在本教程中,我们将详细解释方法参考概念。 2 Java8 方法引用
本文向大家介绍对python:threading.Thread类的使用方法详解,包括了对python:threading.Thread类的使用方法详解的使用技巧和注意事项,需要的朋友参考一下 Python Thread类表示在单独的控制线程中运行的活动。有两种方法可以指定这种活动: 1、给构造函数传递回调对象 2、在子类中重写run() 方法 这里举个小例子: 派生类中重写了父类threading
在Java8中,我们可以引用Class实例的方法 a是类的一个实例,其方法是。 我们能在科特林做同样的事吗?我尝试了同样的语法,但没有成功。到目前为止,我只能创建一个扩展方法引用,如下所示: 但在这里,我仍然需要一个
} ---编辑1--更改 根据注释,断言是失败的。