你把这个称作什么?

时间:2015-09-04 19:35:52

标签: java

是否有这个技术的名称(方法调用返回的对象,在同一行上进行另一个方法调用)?

ApplicationServerSettings applicationServerSettings = commonAssets.getApplicationServerSettings();
String pAID = applicationServerSettings.getSetting("plivoAuthID");

而不是

ApplicationServerSettings

此外,当我第一次执行此操作时,Eclipse不会提示我导入类using (Windows.Storage.Streams.IRandomAccessStream imageDataStream = await imageFile.OpenAsync(Windows.Storage.FileAccessMode.Read)) { int _width = Convert.ToInt32((int)imgDisplay.Width); int _height = Convert.ToInt32((int)imgDisplay.Width); originalBitmap = new WriteableBitmap(_width, _height); imageDataStream.Seek(0); await originalBitmap.SetSourceAsync(imageDataStream); srcPixelStream = originalBitmap.PixelBuffer.AsStream(); byte[] originalPixels = new byte[4 * _width * _height]; int pixelLength = srcPixelStream.Read(originalPixels, 0, 4 * _width * _height); byte[] ResultPixels = EdgeDetection.GreyIt(originalPixels); srcPixelStream.Seek(0, SeekOrigin.Begin); srcPixelStream.Write(ResultPixels, 0, pixelLength); originalBitmap.Invalidate(); imgDisplay.Source = originalBitmap; } ,但如果我使用第二种代码样式则会这样做。

此外,这两种风格仅仅是偏好吗?

2 个答案:

答案 0 :(得分:7)

该技术称为method chaining

String pAID = commonAssets.getApplicationServerSettings().getSetting("plivoAuthID");

来自wiki的定义:

  

方法链接,也称为命名参数惯用法,是一种常见的方法   用于在面向对象中调用多个方法调用的语法   编程语言。每个方法返回一个对象,允许   呼叫在一个声明中被链接在一起而不需要   用于存储中间结果的变量。[1]局部变量   声明是语法糖,因为人类有困难   深度嵌套的方法调用。[2] [3]方法链也称为   由于方法数量的增加,火车失事   在更多方法出现的同一行中一个接一个地发生   链接在一起[4]即使通常在它们之间添加换行符   方法

你的第二个问题:

另外,当我第一次执行时,Eclipse不会提示我导入类ApplicationServerSettings,但是如果我使用第二种代码样式则会这样做。

  • 再次从定义“每个方法都返回一个对象,允许调用在一个语句中链接在一起,而不需要变量来存储中间结果。”这就是为什么它不会提示你导入课程ApplicationServerSettings

另一个看起来更简单的例子(除了想要介绍之外):

看看wiki示例:

class Person {
    private String name;
    private int age;

    // In addition to having the side-effect of setting the attributes in question,
    // the setters return "this" (the current Person object) to allow for further chained method calls.

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

    public Person setAge(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: Hello, my name is Peter and I am 21 years old.
        person.setName("Peter").setAge(21).introduce();
    }
}

答案 1 :(得分:1)

它通常被称为流利语法

恕我直言,这是一种风格问题,没有对错。

流利的语法更简洁,有时候是一件好事。

另一个变体对于源级调试更方便。您可以单步执行语句并检查中间结果。