1. ホーム
  2. java

[解決済み] なぜパラメータをnullキャストするのか?重複

2023-07-30 22:39:04

質問

いつ、なぜ、誰かが次のようなことをするのでしょう。

doSomething( (MyClass) null );

あなたはこれをやったことがありますか?あなたの経験を教えていただけませんか?

どのように解決するのですか?

もし doSomething がオーバーロードされた場合、nullを明示的にキャストして MyClass に明示的にキャストする必要があり、正しいオーバーロードが選択されます。

public void doSomething(MyClass c) {
    // ...
}

public void doSomething(MyOtherClass c) {
    // ...
}

キャストする必要がある非制約的な状況は、varargs関数を呼び出すときです。

class Example {
    static void test(String code, String... s) {
        System.out.println("code: " + code);
        if(s == null) {
            System.out.println("array is null");
            return;
        }
        for(String str: s) {
            if(str != null) {
                System.out.println(str);
            } else {
                System.out.println("element is null");
            }
        }
        System.out.println("---");
    }

    public static void main(String... args) {
        /* the array will contain two elements */
        test("numbers", "one", "two");
        /* the array will contain zero elements */
        test("nothing");
        /* the array will be null in test */
        test("null-array", (String[])null); 
        /* first argument of the array is null */
        test("one-null-element", (String)null); 
        /* will produce a warning. passes a null array */
        test("warning", null);
    }
}

最後の行は以下のような警告が出ます。

Example.java:26: 警告: 非 Varargs メソッドの呼び出しで、最後のパラメータに不正確な 引数の型が不正です。

にキャストします。 java.lang.String を返します。 を呼び出します。

にキャストします。 java.lang.String[] に変換します。 にキャストし、この 警告