参数传递和方法调用

时间:2013-05-16 02:33:06

标签: java eclipse

我对参数传递有疑问。在此示例中,methodTwo想要调用methodOne,但只使用x和y值,而不是Color颜色。当我尝试这样做时,我在Eclipse中得到一个错误“类型'示例类名'中的方法methodOne(double x,double y,Color color)不适用于参数(double,double))”

如果方法不完全使用methodOne的所有参数,那么可以不调用另一个方法吗?

private void methodOne (double x, double y, Color color){
   statements...;
  }

private void methodTwo (x, y ){
  methodOne(x, y);
  statements...;
}

4 个答案:

答案 0 :(得分:1)

您需要使用所有参数来调用method1。 (参数顺序和参数类型也很重要)

如果您没有第三个参数,可以将method1用作

private void methodTwo (x, y ){
  method 1(x, y, null);
  statements...;
}

答案 1 :(得分:1)

在您的代码中如下: -

  private void methodTwo (x, y ){
      methodOne(x, y);  //Now this will show error , because parameter not matching
      statements...;
    }

如果您不想传递第3个参数,则会显示错误。因此,您必须传递第3个参数,并且为了您的目的,您可以传递null,因为您没有在函数定义中使用第3个参数。

Ist解决方案: -

private void methodTwo (x, y ){
      methodOne(x, y,null); 
      //statements...;
    }

第二个解决方案,您可以使用以下2个参数重载此methodOne: -

private void methodOne(double x, double y, Color color){
   //statements... same job;
  }

private void methodOne(double x, double y){
   //statements...same job;
  }

现在,当您使用2参数调用methodOne方法时,如下所示: -

private void methodTwo (x, y ){
  methodOne(x,y); // Now the overloaded method will call
  //statements...;
}

答案 2 :(得分:0)

方法名称必须是一个单词。您还需要提供最后一个参数。

private void method1 (double x, double y, Color color){
   statements...;
  }

private void method2 (x, y ){
  method1(x, y, someColorOrNull);
  statements...;
}

从JLS,第3.8节“标识符”:

  

标识符是Java字母和Java的无限长度序列   数字,第一个必须是Java字母。

     
Identifier:
    IdentifierChars but not a Keyword or BooleanLiteral or NullLiteral

IdentifierChars:
    JavaLetter
    IdentifierChars JavaLetterOrDigit

JavaLetter:
    any Unicode character that is a Java letter (see below)

JavaLetterOrDigit:
    any Unicode character that is a Java letter-or-digit (see below)

答案 3 :(得分:0)

  

如果方法2没有使用方法1的所有参数,方法2是否可以不调用另一个方法1?

它可以,但您必须覆盖方法1,如下所示:

    private void method 1 (double x, double y, Color color){
       statements...;
      }

    private void method 1 (double x, double y){
       statements...;
      }

    private void method 2 (x, y ){
      method 1(x, y);
      statements...;
    }