【问题标题】:Using two full stops in java between methods, variables, or objects在 java 中的方法、变量或对象之间使用两个句号
【发布时间】:2015-12-14 04:37:26
【问题描述】:

我确信互联网上有我想象的 java 基本功能的解释,但是因为我完全不知道这个动作试图实现什么,所以我没有正确描述搜索,也没有结果来解释我的困惑。因此,请引导我朝着正确的方向前进,因为我找不到搜索这意味着什么的方法。

所以下面我有一个我感到困惑的例子,来自GL2 gl = drawable.getGL().getGL2(); 行。我知道如何将方法与对象(例如 object.method())等或与变量一起使用,但是这个引用的行与两个句号和方法不同,而不是一个。它到底想做什么?它似乎在为我创建一个“gl”对象,然后它使用 getGL2() 方法,但 也是 getGL(),当我尝试使用相同的表单和一些方法进行测试时,我'已经让我不能像那样同时链接它们。所以我会使用变量或对象并执行“.method().method2()”,但它不起作用。

我也不明白它是如何创建一个对象“GL2 gl”的,其中GL2 是类型,gl 是对象的名称,但是在“=”之后没有像我这样的“新”平时见。

代码示例:

  public void init (GLAutoDrawable drawable) { 
    GL2 gl = drawable.getGL().getGL2();
    //GL2 gl2 = drawable.getGL().getGL2(); 
    gl.glClearColor(0,0,0,1); // black
    //gl2.glClearColor(0,0,0,1); 
  }

【问题讨论】:

  • 检查 this 已失效。
  • getGL()drawable 上调用,它返回一个对象,在该对象上调用getGL2(),此方法返回对GL2 对象的引用

标签: java object methods


【解决方案1】:

首先,方法init 接受一个参数drawable

drawable 属于GLAutoDrawable 类型,它有一个名为getGL() 的方法。

例如,GLAutoDrawable 类可能是这样的:

public class GLAutoDrawable {

  // other stuff

  public GL getGL(){
    // other stuff
    return gl;
  }

  // other stuff

}

这里,getGL() 返回一个名为gl 的变量,其类型为GL。尽管您提供的代码中没有指定,但我假设它被称为 GL

(有关退货声明的更多信息,请阅读http://docs.oracle.com/javase/tutorial/java/javaOO/returnvalue.html

然后,从getGL() 返回的变量调用了方法getGL2()

例如,GL 类可能如下所示:

public class GL {

  // other stuff

  public GL2 getGL2(){
    // other stuff
    return gl2;
  }

  // other stuff

}

GL 类中的方法getGL2() 返回一个名为gl2 的对象,这就是代码中的最终变量。

基本上,GL2 gl = drawable.getGL().getGL2(); 等同于:

GL g = drawable.getGL();
GL2 gl = g.getGL2();

除了节省空间而无需命名新变量。

【讨论】:

  • 谢谢你,现在清楚多了。我将尝试一些随机类来尝试这个,我尝试看看它在实践中是如何工作的。如果我再次感到困惑,我可能会要求用一个新示例进行更多说明。
【解决方案2】:

GL2 gl = drawable.getGL().getGL2();

drawable 有一个 getGL() 方法返回一个对象(假设它是一个 GL)。 GL 对象有一个getGL2() 方法,所以你只是在getGL() 的结果上调用getGL2()

这可以使代码更易于阅读,但如果您的任何“链”返回 null,您将遇到麻烦。

【讨论】:

    【解决方案3】:

    在对象上调用方法由四部分组成:对象引用、方法名、参数、返回值。

    varToStoreReturnValue = objectReference.methodName(parameters);
    

    由于一个方法可以返回一个对象,所以您可以调用一个方法来检索一个对象引用,然后在该引用上调用另一个方法:

    objectReference1 = objectReference.methodName(parameters);
    varToStoreReturnValue = objectReference2.anotherMethodName(newParameters);
    

    上面这个例子可以写成:

    varToStoreReturnValue = objectReference.methodName(parameters).anotherMethodName(newParameters);
    

    如果不需要参数,则如下所示:

    ReturnType varToStoreReturnValue = objectReference.methodName().anotherMethodName();
    

    ...在你的情况下看起来像:

    GL2 gl = drawable.getGL().getGL2();
    

    【讨论】:

    • 感谢您的回答。 returnValue = objectReference2.anotherMethodName(newParameters); 我不确定这通常是如何出现的,什么是“returnValue”?我认为返回值仅在期望某种类型的返回值的方法之后。如果您将 = 放在返回值之后,您如何在不输入“return”的情况下返回它?
    猜你喜欢
    • 2010-09-12
    • 1970-01-01
    • 2017-05-15
    • 2017-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-10
    • 1970-01-01
    相关资源
    最近更新 更多