当前位置:  开发笔记 > 编程语言 > 正文

为什么空投?

如何解决《为什么空投?》经验,为你挑选了2个好方法。

我在某处看到了这段代码并且想知道:何时以及为什么有人会做以下事情:

doSomething( (MyClass) null );

你有没有这样做过?你能分享一下你的经历吗?



1> Johannes Sch..:

如果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:warning:非varargs调用varargs方法,最后一个参数的参数类型不精确;
转换java.lang.String为varargs调用
转换java.lang.String[]为非varargs调用并禁止此警告


这与NullPointerException无关.您不取消引用null.您只需更改MyClass引用的类型,以便重载结果可以找到正确的方法.aygunes提供了一个可以使用的好例子
通常在单元测试中,您可能会将null传递给函数

2> Eren Aygunes..:

假设您有这两个函数,并假设它们接受null第二个参数的有效值.

void ShowMessage(String msg, Control parent);
void ShowMessage(String msg, MyDelegate callBack);

这两种方法的区别仅在于它们的第二个参数的类型.如果要使用其中一个null作为第二个参数,则必须将其null转换为相应函数的第二个参数的类型,以便编译器可以决定调用哪个函数.

要调用第一个函数:ShowMessage("Test", (Control) null);
对于第二个函数:ShowMessage("Test2", (MyDelegate) null);

推荐阅读
mobiledu2402852357
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有