【问题标题】:How to call two methods in same class?如何在同一个类中调用两个方法?
【发布时间】:2017-01-17 07:15:33
【问题描述】:

如何在一个对象上调用同一类的两个方法?我的意思是我尝试编写一个类,它是在代码上方运行的方法:

volume = Calculate.do_calc().get_volume(a);

我正在创建Calculate 类和它的两个方法。 do_calc() 和 get_volume(a)。我应该如何编写这个类来运行该代码。

【问题讨论】:

  • 它取决于很多东西,比如你的方法是静态的吗?方法的返回类型是什么?
  • 它们的返回类型是float。
  • 它们是静态的吗?并且都具有相同的返回类型?
  • 它们不是静态的。是的,它们具有相同的返回类型。do_calc() 方法将有多个 get_volume() 方法。我想我会重载 get_volume() 方法。但是我不明白如何在一行中调用同一类的两个方法。
  • 请参考我的分析器,如果两者具有相同的返回类型,则无法在一行中调用

标签: java function inheritance methods overloading


【解决方案1】:

除非 do_calc() 返回函数 get_volume() 所在的类,否则永远不要这样做。

【讨论】:

  • s/should never/cannot/g.
【解决方案2】:

这是给你的一个小样本。

public class ChainTest {

        public static void main(String[] args) {
                System.out.println(new ChainTest().do_calc().get_volume(1));
        }

        public ChainTest do_calc() {
                // do something;
                return ChainTest.this;
        }

        public int get_volume(int a) {
                return a;
        }
}

【讨论】:

  • s/ChainTest.this/this/g
  • @BoristheSpider - 你在这里评论了什么?我没找到你
【解决方案3】:

您不需要在一行中编写代码。您可以在不同的行中调用相同的对象方法。

Calculator calculator = new Calculator();
calculator.do_calc();
calculator.get_volume(a);

如果你想要静态方法

Calculator.do_calc();
Calculator.get_volume(a);

【讨论】:

    【解决方案4】:

    案例 1 如果 do_calc 是静态的

    public class Calculator {
    
        public static void main(String[] args) {
            System.out.println(Calculator.do_calc().get_volume(1));
        }
    
        public static Calculator do_calc() {
    
            Calculator calculator = new Calculator();
            // do something;
    
            return calculator;
        }
    
        public float get_volume(int a) {
            return a;
        }
    }
    

    案例 2:如果 do_calc 不是静态的

    public class Calculator {
    
        public static void main(String[] args) {
            System.out.println(new Calculator().do_calc().get_volume(1));
        }
    
        public Calculator  do_calc() {
    
            Calculator calculator = new Calculator();
            // do something;
    
            return calculator;
        }
    
        public float get_volume(int a) {
            return a;
        }
    }
    

    案例 3:如果两者都具有您在评论中提到的返回类型 float

    public class Calculator {
    
        public static void main(String[] args) {
    
            Calculator calculator = new Calculator();
            calculator.do_calc();
            System.out.println(calculator.get_volume(1));
        }
    
        public float do_calc() {
    
            // do something;
    
            return 1f; // return your result
        }
    
        public float get_volume(int a) {
            // do something;
            return a;
        }
    }
    

    【讨论】:

      【解决方案5】:

      如果不是static,您必须在类的每个方法的末尾加上return this;。如果方法是static,这样做:

      public class Calculation {
           public static Calculation do_calc () {
                 //do your calculation
                return null;
            }
      
           public static Calculation get_volume(int x) {
                 //do your calculation
                return null;
            }
      }
      

      然后你可以写:

      Calculation.do_calc().get_volume(1);
      

      返回null 没有问题,因为这些方法是静态的,并且与类的特定实例无关。不喜欢就return new Calculation();

      [编辑]

      如果你需要将结果传递给第二个方法,第一个方法应该返回一个真实的对象:

      public class Calculation {
      
           int result;
      
           public static Calculation do_calc () {
                 //do your calculation
                 Calculation c=new Calculation();
                 c.result = theResultOfTheCalculation;
                return c;
            }
      
           public void get_volume(int x) {
                 //do your calculation for example:
                 System.out.println(result + x);
            }
      }
      

      【讨论】:

      • 这似乎是一个static 方法,在这种情况下do_calc() 需要是一个静态工厂方法。不像return this那么简单...
      • 但他说“超过一个对象”! @BoristheSpider
      • 这是一个菜鸟Java程序员,不要看那么多字。看看语法 - 至少对我来说,它看起来更像 static 方法而不是实例方法。
      • 现在不是@BoristheSpider
      • 我想我错了,我说它们不是静态的,但我现在学会了。要在不创建对象的情况下调用方法,该方法应该是静态的吗?然后我应该使方法静态。如果我错了,请纠正我
      猜你喜欢
      • 1970-01-01
      • 2011-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-08
      • 1970-01-01
      相关资源
      最近更新 更多