1

コードは

public class TestOverload {

    public static void print(Float f, double d) {
        System.out.println("Float,double");
    }

    public static void print(float f, double d) {
        System.out.println("float,double");
    }

    public static void print(int f, double d) {
        System.out.println("int,double");
    }
//  public static void print(int f, float d) {
//      System.out.println("int,float");
//  }

    public static void print(double d1, double d) {
        System.out.println("double,double");
    }

    public static void print(float d1, float d) {
        System.out.println("float,float");
    }

    public static void main(String[] args) {
        TestOverload.print(2, 3.0);

        TestOverload.print(2, 3.0f);//Compiler error:The method print(float, double) is ambiguous for the type TestOverload
    }
}

エラーが発生する理由、代わりに print(float d1, float d) を選択する必要があります

PS:上記のコードで、コメントした場合:

//  public static void print(int f, double d) {
//      System.out.println("int,double");
//  }

次に、 print(float d1, float d) が呼び出されます...

4

1 に答える 1

4
print(2, 3.0f);

暗黙の型変換はバックグラウンドで行われるため、 と の両方print(int, float)である可能性があります。print(float, double)intに変換できますfloat。Javac (またはコンパイラ) は、どちらを意味するのかを確実に知ることができません。

自分で選択したい場合は、キャストを追加できます。

print((float) 2, (float) 3.0f);

(2 番目のキャスト (float => float) は必要ないことに注意してください。)

于 2012-05-07T08:57:47.130 に答える