Java 为什么一个方法可以在另一个方法上调用?
我是JAVA新手。有人能解释一下上述陈述的结构吗 我理解可以通过以下方式访问实例的方法:Java 为什么一个方法可以在另一个方法上调用?,java,oop,object,methods,Java,Oop,Object,Methods,我是JAVA新手。有人能解释一下上述陈述的结构吗 我理解可以通过以下方式访问实例的方法: NodeList nlList = eElement.getElementsByTagName(sTag).item(0).getChildNodes(); 在上面的语句中,有三个方法名与一个对象名关联。这是如何工作的? eeelement.getElementsByTagName将返回一个对象 然后在该对象上调用.item(0),它将返回另一个对象 在最后一个对象上调用.getChildNodes()
NodeList nlList = eElement.getElementsByTagName(sTag).item(0).getChildNodes();
在上面的语句中,有三个方法名与一个对象名关联。这是如何工作的?
将返回一个对象eeelement.getElementsByTagName
- 然后在该对象上调用
,它将返回另一个对象.item(0)
- 在最后一个对象上调用
.getChildNodes()
object.method()
来调用方法,但是如果有多个这样的调用,可以像示例中那样链接它们
只要你不做得过火,这可以产生一个更可读的代码,它可以保持它的紧凑性。
将返回一个对象eeelement.getElementsByTagName
- 然后在该对象上调用
,它将返回另一个对象.item(0)
- 在最后一个对象上调用
.getChildNodes()
object.method()
来调用方法,但是如果有多个这样的调用,可以像示例中那样链接它们
只要您不过度使用,这可以生成更可读的代码,并保持代码紧凑。调用
eeelement.getElementsByTagName(sTag)
会返回一些对象。然后,在此对象上调用项(0)
。等等换言之,上述声明相当于
objectName.methodName();
这种技术被调用,它在使代码更简洁和可读性方面非常有用(如果不是过分的话)
它的一种特殊形式——在一些框架中广泛使用,例如Hibernate——是链接同一对象上的方法调用,例如
SomeObject so = eElement.getElementsByTagName(sTag);
OtherObject oo = so.item(0);
NodeList nlList = oo.getChildNodes();
可以说,这比以前更加紧凑
SomeObject o = new SomeObject().setFoo(1).setBar("boo").setBaz(42);
如果您没有具有所需参数的构造函数,那么您肯定需要它。但即使有这样一个构造函数,也有人可能会说
SomeObject o = new SomeObject();
o.setFoo(1);
o.setBar("boo");
o.setBaz(42);
比方法链接习惯用法可读性差。唉,Java(与C不同)在方法调用中没有命名参数。对
eeelement.getElementsByTagName(sTag)
的调用返回一些对象。然后,在此对象上调用项(0)
。等等换言之,上述声明相当于
objectName.methodName();
这种技术被调用,它在使代码更简洁和可读性方面非常有用(如果不是过分的话)
它的一种特殊形式——在一些框架中广泛使用,例如Hibernate——是链接同一对象上的方法调用,例如
SomeObject so = eElement.getElementsByTagName(sTag);
OtherObject oo = so.item(0);
NodeList nlList = oo.getChildNodes();
可以说,这比以前更加紧凑
SomeObject o = new SomeObject().setFoo(1).setBar("boo").setBaz(42);
如果您没有具有所需参数的构造函数,那么您肯定需要它。但即使有这样一个构造函数,也有人可能会说
SomeObject o = new SomeObject();
o.setFoo(1);
o.setBar("boo");
o.setBaz(42);
比方法链接习惯用法可读性差。唉,Java(不像C#)在方法调用中没有命名参数。如果
objectName.methodName()
返回一个对象,那么您可以在该对象上调用一个方法,例如objectName.methodName().anotherMethod()
。这只是一个简单的方法调用链接。如果objectName.methodName()
返回一个对象,那么您可以在该对象上调用一个方法,例如objectName.methodName().anotherMethod()
。这只是一个简单的方法调用链接。上述语句按以下步骤执行:
1) 在Element类型的变量EEElement中,获取名称为sTag的所有标记。此方法返回节点列表
2) 在返回的节点列表中-从列表中获取第一项(0)。这将返回一个节点
3) 在返回的节点上-获取其所有子节点,这将返回节点列表并将其分配给nlList
在方法返回对象的情况下,您可以继续调用返回对象上的方法,不管您希望调用的深度有多深。只要结果方法返回您试图分配给的类型的对象。上述语句将按以下步骤执行:
SomeObject o = new SomeObject(1, "boo", 42);
1) 在Element类型的变量EEElement中,获取名称为sTag的所有标记。此方法返回节点列表
2) 在返回的节点列表中-从列表中获取第一项(0)。这将返回一个节点
3) 在返回的节点上-获取其所有子节点,这将返回节点列表并将其分配给nlList
在方法返回对象的情况下,您可以继续调用返回对象上的方法,不管您希望调用的深度有多深。只要结果方法返回您试图分配给的类型的对象
SomeObject o = new SomeObject(1, "boo", 42);
还可以返回对象引用(只要其返回类型不是“void”),因此实际上是:
objectName.methodName();
第二个方法调用针对第一个方法返回的对象。在你的例子中
objectRef = objectName.methodName();
getElementsByTagName(sTag)返回一个对象,并对该对象调用项(0)。第二个方法调用返回的对象,然后对其调用getChildNodes()
还可以返回对象引用(只要其返回类型不是“void”),因此实际上是:
objectName.methodName();
第二个方法调用针对第一个方法返回的对象。在你的例子中
objectRef = objectName.methodName();
getElementsByTagName(sTag)返回一个对象,并对该对象调用项(0)。第二个方法调用返回的对象,然后对其调用getChildNodes()
eElement.getElementsByTagName(sTag).item(0).getChildNodes();
表示您在obj上调用getA()
。它返回一个对象A,然后对结果对象A调用getB()
,而不是原始的obj
类似于
obj.getA().getB().getC();
但是没有临时变量
缺点是调试更加困难,因为您没有中间变量,而且可能更加脆弱(例如,如果
getA()
返回null,那么整个语句就会崩溃,并且您无法轻松地知道在哪里,因为stacktrace只包含行号).每个方法都对p的返回值起作用