我可以两次使用双结肠吗?
示例我有3个班级
Class A {
String name;
B classB;
}
Class B {
String age;
C classC;
}
Class C {
String location;
}
我需要使用A::getClassB::getClassC::getLocation
这可能吗?
答案 0 :(得分:0)
我需要使用
A::getClassB::getClassC::getLocation
这可能吗?
不是这样。
您正在谈论方法引用语法,它通过名称以及它所属的类或接口的名称,类型或实例来指定方法。根据{{3}},他们可以采取四种形式:
ContainingClass::staticMethodName
containingObject::instanceMethodName
ContainingType::methodName
ClassName::new
类型和变量名称不能包含冒号,因此可以想象得到链式冒号的唯一一个是(2),然后您将形成对lambda方法的引用。这似乎不是你想要做的。
如果你的类实际上有你似乎想要使用的getter方法,那么你应该能够编写一个类似于你的表达式的lambda:
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; }
}
特别注意a -> a.getClassB().getClassC().getLocation()
是一个lambda,用于计算作为输入的A
的位置字符串,而myA.getClassB().getClassC()::getLocation
是对getLocation()
方法的引用。通过调用C
获得的特定myA.getClassB().getClassC()
(在实例化方法引用的位置,而不是使用它的点)。我怀疑其中一个是你真正想要的。