【问题标题】:Why no compilation errors for absentee return types为什么缺勤返回类型没有编译错误
【发布时间】:2018-02-13 12:03:32
【问题描述】:


我试图理解方法重载的概念。

public class Demo {

    public int myMethod(int num1, int num2) {
        System.out.println("First myMethod of class Demo");
        return num1 + num2;
    }

    public double myMethod(double var1, double var2) {
        System.out.println("Second myMethod of class Demo");
        return var1 - var2;
    }

    public static void main(String args[]) {
        Demo obj1 = new Demo();
        //here
        obj1.myMethod(10, 10);
        // and here
        obj1.myMethod(20, 12);
    }
}

我试图弄清楚为什么在 obj1.myMethod(10, 10);obj1.myMethod(20, 12); 语句中缺少返回类型没有编译错误。
显然 myMethod() 都返回 int 和 double。

为什么没有编译错误?请帮我理解。

【问题讨论】:

  • 你可以忽略方法返回的值。
  • 因为有两个具有不同签名的重载方法,并且您调用单个方法两次 double 意味着 0.0 个浮点值
  • 这是java设计本身。详情请参考:stackoverflow.com/questions/10782814/…
  • 在Java中,你没有义务处理被调用方法的返回值,编译错误意味着你的代码不符合编程语言的语法。例如,您声明了一个 int 变量并通过调用具有双返回值的方法来分配它,反之亦然
  • 返回类型在那里,你只是不将返回值分配给变量。

标签: java compiler-errors return-type


【解决方案1】:

myMethod() 都返回了一些东西。你调用这些方法:

obj1.myMethod(10, 10);
obj1.myMethod(20, 12);

但是你对这个返回值什么也不做。您可能需要考虑将这些方法的返回值存储在变量中,例如:

int first = obj1.myMethod(10, 10); //assigning return value of myMethod to int variable

然后你可以打印first,看看用myMethod()计算的返回值是多少:

System.out.println(first);

另一种可能,不是将返回值存储在变量中,而是直接将返回值打印到控制台:

System.out.println(obj1.myMethod(10, 10));

请注意,在两个方法调用中:

obj1.myMethod(10, 10);
obj1.myMethod(20, 12);

正在调用返回 int 的方法 (public int myMethod(int num1, int num2) {...})。这是因为您将int 参数传递给myMethod()。如果您希望调用返回 double 的方法变体,可以将参数更改为 double 值:

obj1.myMethod(20.0, 12.0); // here you pass two double values as arguments

或:

obj1.myMethod((double) 20,(double) 12); // here you cast int values to double

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多