Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么一个方法可以在另一个方法上调用?_Java_Oop_Object_Methods - Fatal编程技术网

Java 为什么一个方法可以在另一个方法上调用?

Java 为什么一个方法可以在另一个方法上调用?,java,oop,object,methods,Java,Oop,Object,Methods,我是JAVA新手。有人能解释一下上述陈述的结构吗 我理解可以通过以下方式访问实例的方法: NodeList nlList = eElement.getElementsByTagName(sTag).item(0).getChildNodes(); 在上面的语句中,有三个方法名与一个对象名关联。这是如何工作的? eeelement.getElementsByTagName将返回一个对象 然后在该对象上调用.item(0),它将返回另一个对象 在最后一个对象上调用.getChildNodes()

我是JAVA新手。有人能解释一下上述陈述的结构吗

我理解可以通过以下方式访问实例的方法:

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的返回值起作用