当前位置: 首页 > 面试题库 >

为什么要null转换参数?

宁良平
2023-03-14
问题内容

什么时候以及为什么有人要执行以下操作:

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为varargs调用
强制转换java.lang.String[]为非varargs调用并禁止显示此警告



 类似资料:
  • 问题内容: 我发现一些代码我工作的地方的点被强制转换,因为它是传递给方法。 为什么要这样做? 我知道这个问题涉及重载的方法,并使用类型转换来确定要调用的方法的版本。 但是,如果不执行强制类型转换,如果使用空参数调用该方法,那么是否会重选带有其他类型的参数的重载方法呢?那么演员阵容还能完成什么呢? 问题答案: 如果 未 执行转换,则将选择 最具体的 版本。 可以是type 或type 的空引用。因此

  • balusc提供了关于如何使用JSF转换器以及为什么这里需要转换的明确答案,但我的问题是为什么要麻烦?在我看来,一门专门用于转化的额外课程似乎太多了。为什么不让支持bean的setSelectedXXX()方法接受字符串而不是对象,并在那里而不是在转换器中进行转换呢。getAsObject()?事实上,对我来说,将支持bean的setSelectedXXX()方法命名为setSelectedXXX

  • 问题内容: “在删除不可见的类之前,需要触发重排,以使过渡按预期进行。” 我的问题是: 1)为什么需要触发回流? 2)我知道我们应该避免使用重排,如果确实如此,那么为什么作者建议使用重排以使过渡正常工作? 3)除了使用回流以外,还有其他方法可以使过渡工作吗? 谢谢。 问题答案: (有效地:“为什么我不能 轻易 在属性中使用过渡”) 简短答案 : CSS过渡依赖于元素的 开始 或 静态 属性。将元素

  • 问题内容: 命名函数的返回参数有什么好处? 问题答案: 命名它们有一些好处: 它用作文档。 它们会自动声明并初始化为零值。 如果您有多个返回站点,则更改函数的返回值并不需要全部更改,因为它只会显示“ return”。 还有缺点,主要是很容易通过声明相同名称的变量来意外地遮盖它们。 有效的Go中有一个关于命名结果参数的部分: 可以给Go函数的返回或结果“参数”指定名称,并将其用作常规变量,就像传入参

  • 问题内容: 我正在使用Java 1.6.0_25。 我定义了一个注释: 后来当我使用getAnnotation时: 编译器和IDE同意我必须强制转换结果,但是getAnnotation在Java 1.5文档中声明为: 由于Resource.class是Class类型,在我看来,这意味着cls.getAnnotation(Resource.class)应该返回Resource类型,并且我需要进行强制

  • 问题内容: 在我的Web应用程序中,我在Apache Tomcat(TomEE)/7.0.37服务器上使用OpenJPA。我使用Netbeans自动生成类(“来自数据库的实体类…”和“来自实体类的会话Bean …”)。在SessionBean(例如UserFacade)上,我想获取EntityManager: 但是当我通过上述方式得到它时,我得到的是空值。当我通过: ecm不为空,还可以 我的pe