我想知道这个Java代码块中发生了什么

时间:2012-01-23 05:28:43

标签: java

Objectname.methodone()
.methodtwo()
.methodthree()
.methodfour();

这些陈述是否与

相同
Objectname.methodone();
Objectname.methodtwo();
Objectname.methodthree();
Objectname.methodfour();

谢谢,

6 个答案:

答案 0 :(得分:2)

取决于methodonemethodtwomethodthreemethodfour的返回类型。发生了什么事情,您在methodone上呼叫Objectname,在methodtwo的返回类型上呼叫methodone,依此类推。

如果methodonemethodfour都返回this,那么是的,它会是相同的。

这称为method chaining

答案 1 :(得分:1)

可能,如果每个方法的实现都以return this;结尾,那么调用可以像这样链接。但是每个都可以返回对不同对象的引用,然后调用“next”方法。

答案 2 :(得分:0)

不,它不像它那样

    Objectname.methodone().methodtwo().methodthree().methodfour();

类似于

 result = method1().method2(). ........ method n()

称为方法链接

参考Method chaining in Java

示例

class Person
{
        private final String name;
        private int age;

        public Person setName(final String name) {
                this.name = name;

                return this;
        }

        public Person setAge(final int AGE) {
                this.age = AGE;

                return this;
        }

        public void introduce() {
                System.out.println("Hello, my name is " + name + " and I am " + age + " years old.");
        }

        // Usage:
        public static void main(String[] args) {
                Person person = new Person();
                // Output of this sequence will be: Hello, my name is Peter and I am 21 years old.
                person.setName("Peter").setAge(21).introduce();
        }
}

来源: - http://en.wikipedia.org/wiki/Method_chaining

答案 3 :(得分:0)

不一定,在methodtwo的返回值上调用methodone,在methodthree的返回值上调用methodtwo,依此类推。它们(必然)不会被称为同一个对象。

等效于:

MethodOneReturnType x = object.methodone();
MethodTwoReturnType y = x.methodtwo();
MethodThreeReturnType z = y.methodthree();

答案 4 :(得分:0)

这取决于那些方法返回的内容。在返回methodone时调用methodtwo。如果methodone返回Objectname,那么它们是相同的。

答案 5 :(得分:0)

它们不太可能相同。想想披萨制造商。

new PizzaBuilder().withDough("dough").withSauce("sauce").withTopping("topping").build();

这会构建完整的披萨。而如果你单独调用with方法,它将只构建一个部分披萨。