在java(android)中,null的类型转换会引发错误或异常吗?

在java(android)中,null的类型转换会引发错误或异常吗?,java,android,Java,Android,是否建议对特定对象使用null类型转换,并在构造函数中使用它会降低代码的质量 我在下面的场景中这样做 实际的构造函数如下所示: SomeListener(Fragment1 fragment1,String someValue){} SomeListener(Fragment2 fragment2,String someValue){} 现在,当我像下面这样使用这个构造函数时,我得到一个错误,它是不明确的,并且与上面两个构造函数都匹配 SomeListener sml = new SomeL

是否建议对特定对象使用null类型转换,并在构造函数中使用它会降低代码的质量 我在下面的场景中这样做

实际的构造函数如下所示:

SomeListener(Fragment1 fragment1,String someValue){}

SomeListener(Fragment2 fragment2,String someValue){}
现在,当我像下面这样使用这个构造函数时,我得到一个错误,它是不明确的,并且与上面两个构造函数都匹配

SomeListener sml = new SomeListener(null,"value");
所以我做的是:

SomeListener sml = new SomeListener((Fragment2)null,"value");
这是一种很好的编码方式还是有更好的解决方案?此解决方案是否会在运行时引起任何问题?

中对此进行了描述:

空引用始终可以分配或强制转换到任何引用类型

所以不,它不会抛出异常


另一种方法(我不认为更好)是为不同的构造函数提供静态工厂方法:

static SomeListener newFragment2Listener(String str) {
  return new SomeListener((Fragment2) null, str);
}
不过,所有这一切都是为了对类的用户隐藏强制转换。我总是觉得演员有点难看;这种丑陋是否是另一种方法的原因取决于您。

这一点在:

空引用始终可以分配或强制转换到任何引用类型

所以不,它不会抛出异常


另一种方法(我不认为更好)是为不同的构造函数提供静态工厂方法:

static SomeListener newFragment2Listener(String str) {
  return new SomeListener((Fragment2) null, str);
}

不过,所有这一切都是为了对类的用户隐藏强制转换。我总是觉得演员有点难看;这种丑陋是否是另一种方法的原因取决于你。

你所建议的方法是正确的。它告诉编译器您要使用哪个版本的构造函数。您是否尝试过这样强制转换
null
?怎么搞的?(这很好。)您可以通过尝试或阅读JLS来轻松判断它是否会抛出异常。您是否考虑过使用构建器模式,那么您就不必将null传递到构造函数中,您将只使用“someValue”构建侦听器@你能举个例子吗?我试试out@AshFrench这里不需要构建器,这会使事情变得过于复杂;静态工厂方法就足够了。你建议的方法是正确的。它告诉编译器您要使用哪个版本的构造函数。您是否尝试过这样强制转换
null
?怎么搞的?(这很好。)您可以通过尝试或阅读JLS来轻松判断它是否会抛出异常。您是否考虑过使用构建器模式,那么您就不必将null传递到构造函数中,您将只使用“someValue”构建侦听器@你能举个例子吗?我试试out@AshFrench这里不需要构建器,这会使事情变得过于复杂;静态工厂方法就足够了。