Java Lambda(双冒号)
我能用双冒号两次吗 我有三节课Java Lambda(双冒号),java,Java,我能用双冒号两次吗 我有三节课 Class A { String name; B classB; } Class B { String age; C classC; } Class C { String location; } 我需要使用A::getClassB::getClassC::getLocation 这可能吗 我需要使用A::getClassB::getClassC::getLocation 这可能吗 并非如此 您正在谈论的是方法引用语法,它通过方法的名称以
Class A {
String name;
B classB;
}
Class B {
String age;
C classC;
}
Class C {
String location;
}
我需要使用A::getClassB::getClassC::getLocation
这可能吗
我需要使用A::getClassB::getClassC::getLocation
这可能吗
并非如此
您正在谈论的是方法引用语法,它通过方法的名称以及它所属的类或接口的名称、类型或实例来指定方法。根据调查,他们可以采取四种形式:
ContainingClass::staticMethodName
containingObject::instanceMethodName
ContainingType::methodName
ClassName::new
a -> a.getClassB().getClassC().getLocation()
或者,您应该能够编写此表单的方法引用:
myA.getClassB().getClassC()::getLocation
这些具有不同的意义,如本示例代码所示:
import java.util.function.Function;
import java.util.function.Supplier;
public class X {
// Note the types declared for these objects:
Function<A, String> f1 = a -> a.getClassB().getClassC().getLocation();
Supplier<String> f2 = new A().getClassB().getClassC()::getLocation;
}
class A {
String name;
B classB = new B();
public B getClassB() { return classB; }
}
class B {
String age;
C classC = new C();
public C getClassC() { return classC; }
}
class C {
String location;
public String getLocation() { return location; }
}
import java.util.function.function;
导入java.util.function.Supplier;
公共X类{
//请注意为这些对象声明的类型:
函数f1=a->a.getClassB().getClassC().getLocation();
供应商f2=新A().getClassB().getClassC()::getLocation;
}
甲级{
字符串名;
B类B=新B();
公共B getClassB(){return classB;}
}
B类{
弦年龄;
C类C=新的C();
公共C getClassC(){return classC;}
}
C类{
字符串位置;
公共字符串getLocation(){return location;}
}
请特别注意,
a->a.getClassB().getClassC().getLocation()
是一个lambda,它为作为输入的a
计算位置字符串,而myA.getClassB().getClassC()::getLocation
是对getLocation()的引用
通过调用myA.getClassB().getClassC()
获得的特定C
方法(在实例化方法引用的点,而不是在使用方法引用的点)。我怀疑其中一个是您真正想要的。只有当您将B
、C
和location
声明为static
并且相应的方法也声明为static时,您才可能不尝试它<代码>:用于statics@ACV方法引用只能引用static
方法,这不是真的。@Jesper,你说得对<代码>引用包含Class::staticMethodName的静态方法引用包含object::instanceMethodName的特定对象的实例方法引用包含type::methodName的特定类型的任意对象的实例方法引用构造函数的实例方法ClassName::new,根据,这可能是可能的(MethodReference是一种主要类型,可以是LHS),但在实践中,它似乎不起作用。例如,(Object::toString)::toString
不编译,toString
应该是第一部分返回的任何内容的方法。