SmR*_*Guy 3 java syntax casting
例如,我有一个Object"假装" String:
Object o = new String("dsadsa");
Run Code Online (Sandbox Code Playgroud)
如果我想使用该对象的String函数,首先我必须将它转换为如下字符串:
((String)o).indexOf("sad");
Run Code Online (Sandbox Code Playgroud)
当有这么多括号时,这变得非常烦人且难以理解!特别是当它必须进入IF语句或函数时!
if (((String)o).equals("dsadsa")) {}
Run Code Online (Sandbox Code Playgroud)
避免这种情况的最佳方法是什么?
解决方案是确保您的对象之前是精确的类,例如在方法的原型中.
这是最佳实践,因为它还有助于避免运行时错误.
参数化类(泛型)越来越容易.
否则说:如果您的代码中有很多强制转换,可能存在设计问题.但我们需要更多代码来提出解决方案.
在实践中,正确使用泛型可以摆脱以前在代码中看到的大多数强制转换.
但是如果由于某种原因你不能这样做(较旧的Java版本,遗留库),那么创建一个局部变量,你可以尽早进行演员.
一种特殊情况是将对象从接口类型转换为其实现.这几乎总是错误的,意味着界面设计糟糕.
标准的做法是始终捕捉对象插入到窄类型的变量,你的情况一个String str变量,使用之后.
请注意,在您的第三个示例中,您不需要向下转换:o.equals(o2)也可以.
如果您决定学习Java Generics,您很快就会感到失望:通常他们只是将详细程度从向下转换为类型声明.在重写为泛型时,许多代码片段都是长的,有些甚至更长.