2

これはおそらく非常に単純な質問であることはわかっていますが、私の人生では理解できないようです.

タイトルが示すように、Main メソッドでコンストラクターを呼び出したいだけです。

class Example{
  public static void main (String[] args)
  {
   //I want to call the constructor in the mpgCalculator class....
  }

  public class mpgCalculator {
    public double compute(double mpg, double sizeOfTank)
    {
      double mpL = mpg * 4;
      double tankSizeL = sizeOfTank * 4;
      double kmpL = mpL * 1.6;
      double result = kmpL / tankSizeL;

      return result;
    }
  }
}
4

3 に答える 3

3

問題にさらに追加するには; 内部クラスを使用しているようです。最初に Example のオブジェクトがなければ、作成した方法でクラスをインスタンス化することはできません。

編集:あなたの問題に対する可能な解決策の2つの例:

まず、静的内部クラス。基本的に C++ の入れ子になったクラスのようです。内部クラスを別のインスタンスに関連付ける必要はありません。

public class InnerClassTest {
    public static void main(String[] args) {
        InnerClass test = new InnerClass();
    }
    public static class InnerClass {
        InnerClass() {
          System.out.println("test");
        }
    }
}

2 つ目は、外部クラスからインスタンス化された複雑な内部クラスです。

public class InnerClassTest {
    public static void main(String[] args) {
        InnerClassTest example = new InnerClassTest();
        InnerClass test = example.new InnerClass();
    }
    public class InnerClass {

        InnerClass() {
            System.out.println("test");
        }

    }
}

ユーティリティ関数だけが必要な場合は、chrylis の回答に従ってください。

于 2013-08-25T02:23:55.720 に答える
3

mpgCalculatorコンストラクタを定義していないため、クラスにはデフォルトのコンストラクタしかありません。コンストラクターを手動で呼び出す必要はありません。代わりに、新しいオブジェクトを作成すると、自動的に呼び出されます。おそらくこれが必要です:

mpgCalculator calc = new mpgCalculator();

この特定のケースでは、compute関数は実際には の特定のコピーに関連していないmpgCalculatorため、必要にstatic応じて作成できます ( public static double compute)。次に、別の方法で次のように言うことができます。

double kmpL = mpgCalculator.compute(mpg, size);
于 2013-08-25T02:21:56.293 に答える
0

mpgCalculator(名前を変更するMpgCalculatorか、MPGCalculator変数名と区別Exampleする必要があります)は内部クラスであるため、インスタンス化するには外部クラスのインスタンスが必要です。

double value = new Example().new MpgCalculator().compute();

しかし、これはユーティリティ クラスのように思えますstatic

public static class MpgCalculator {
    // ...
}

外部クラスのインスタンスを作成しなくても、そのインスタンスを作成できます。

double value = new MpgCalculator().compute();
于 2013-08-25T02:34:32.103 に答える