Java 如何通过方法引用访问对象对象内部的方法

Java 如何通过方法引用访问对象对象内部的方法,java,java-8,java-stream,Java,Java 8,Java Stream,有两类A和B。例如,如下所示: class A{ B b; B getB(){ return b; } } class B{ String x = "Test"; String getX(){ return x; } } 我在.map(method\u reference\u here\u for\u getX)中有一个对象,我想调用getX,所以有办法吗 虽然我可以做到以下几点: .map(A::getB) .map(B::getX)

有两类A和B。例如,如下所示:

class A{
    B b;
    B getB(){ return b; }
}

class B{
    String x = "Test";
    String getX(){
       return x;
    }
}
我在
.map(method\u reference\u here\u for\u getX)
中有一个对象,我想调用getX,所以有办法吗

虽然我可以做到以下几点:

.map(A::getB)
.map(B::getX)

or

.map( a -> a.getB().getX())

但是我想做一些像
.map(A::B::getX)
我知道这是绝对错误的,但是我想要这样的东西,这样任何人都可以帮助?

你就是不能。没有语法,它被称为方法引用(method),您可能会显示一个字段引用,该字段引用不受支持,并且从IMO开始看起来很奇怪


这两种方法(
map(a::getB).map(B::getX)
map(a->a.getB().getX())
)之间的区别在于,您将在内部保存一个额外的方法,但这是一个小小的优化,您应该真正研究您认为更可读的方法

你不能,你已经列出了唯一可能的options@Eugene哎呀,我错过了。@Eugene@Holger这是不是可以用类
a
中的一个方法来实现的,这个方法实现为
String returnXFromA(){return getB().getX();}
,然后引用为
a::returnXFromA
?或者,也许我在这种方法中遗漏了更糟糕的东西。@nullpointer当然,但这并不能真正改变链式方法的问题references@nullpointer当然,您可以创建一个形式为
静态字符串someName(a){return a.getB().getX();}
的方法,并使用类似
MyType::someName
的方法引用,但这正是使用更简单的lambda表达式
a->a.getB().getX()
时得到的结果。唯一的区别是,在lambda表达式的情况下,该方法将在字节码级别被标记为“合成”。奇怪的解决方法是:
.map(((函数)A::getB)。然后(B::getX))
,不应使用though@Lino尽管它为可能的选项增加了一个选项(我完全错过了)