“;使用Classname.staticMethod”调用静态方法&“;使用Classname::staticMethod”调用;在java8中
java中“使用Classname.staticMethod调用静态方法”和“使用Classname::staticMethod调用静态方法”之间有什么区别吗“;使用Classname.staticMethod”调用静态方法&“;使用Classname::staticMethod”调用;在java8中,java,method-reference,Java,Method Reference,java中“使用Classname.staticMethod调用静态方法”和“使用Classname::staticMethod调用静态方法”之间有什么区别吗 java中的“使用Object.method调用方法”和“使用Object::method调用方法”之间是否有区别?Classname::staticMethod或Object::method语法用于使用者操作是使用者操作表示,其中编译器确保方法接受给定类型作为输入类型 虽然class.method或object.method是常规的方法
java中的“使用Object.method调用方法”和“使用Object::method调用方法”之间是否有区别?Classname::staticMethod或Object::method语法用于使用者操作是使用者操作表示,其中编译器确保方法接受给定类型作为输入类型
虽然class.method或object.method是常规的方法调用:)使用::表示方法引用,并且可以在需要
@functioninterface
的任何地方使用它们。例如消费者
s、功能
s、谓词
s、供应商
s等。。。。很多Java8特性。
例如,如果方法需要通过供应商提供的字符串
在“MyClass”中
然后你可以:
int value = methodUsingSupplier(MyClass::strProvider);
作为传递strProvider
方法作为方法的“参考”的一种方式,使用供应商方法,然后供应商可以使用它
正如前面在其他答案中所说,编译器确保类型和参数匹配您可以使用这两种方法来调用一个方法,并且该方法将以相同的方式运行。但是,对于这两种情况,您需要不同的语法。在第一种方法中,您“直接”调用该方法来运行其代码。在第二种方法中,使用对方法的引用,并将方法参数(如果有)应用于在引用上定义的方法,以实际运行代码。这对静态方法和实例方法都有效
public static void staticMethodExample() {
double d = 1.23;
double d2 = 4.56;
int x = Double.compare(d, d2); // -1
Comparator<Double> c = Double::compare;
int y = c.compare(d, d2); // -1
}
public static void instanceMethodExample() {
Double d = 1.23;
Double d2 = 4.56;
int x = d.compareTo(d2); // -1
DoubleToIntFunction c = d::compareTo;
int y = c.applyAsInt(d2); // -1
}
publicstaticvoid staticMethodExample(){
双d=1.23;
双d2=4.56;
int x=Double。比较(d,d2);/-1
比较器c=Double::compare;
int y=c.比较(d,d2);/-1
}
公共静态void instanceMethodExample(){
双d=1.23;
双d2=4.56;
int x=d.与(d2)比较;//-1
DoubleToIntFunction c=d::compareTo;
int y=c.applyAsInt(d2);/-1
}
Classname::staticMethod
不调用该方法,因此您的问题基于错误的假设Classname::staticMethod
返回对该方法的方法引用。
int value = methodUsingSupplier(MyClass::strProvider);
public static void staticMethodExample() {
double d = 1.23;
double d2 = 4.56;
int x = Double.compare(d, d2); // -1
Comparator<Double> c = Double::compare;
int y = c.compare(d, d2); // -1
}
public static void instanceMethodExample() {
Double d = 1.23;
Double d2 = 4.56;
int x = d.compareTo(d2); // -1
DoubleToIntFunction c = d::compareTo;
int y = c.applyAsInt(d2); // -1
}