94
|
Alexander Pogrebnyak · 技术社区 · 15 年前 |
![]() |
1
100
我只使用过
通常最好用以下方法来替代:
这是唯一的使用案例
关于编译器警告:我怀疑
|
![]() |
2
17
首先,你强烈反对做任何演员,所以你应该尽可能地限制它!您失去了Java编译时强类型特性的好处。
无论如何,
而不是
编辑:编译时出错
总之,Java只在运行时执行强制检查。但是,如果编译器能够证明这样的强制转换永远不会成功(例如,将一个类强制转换为另一个不是父类型的类,并将最后一个类类型强制转换为不在其类型层次结构中的类/接口),则会发出错误。从那以后
|
![]() |
3
16
尝试在语言之间翻译结构和概念总是有问题的,而且常常误导人。铸造也不例外。特别是因为Java是一种动态语言,C++有点不同。 不管你怎么做,在爪哇所有的铸造都是在运行时完成的。类型信息在运行时保存。C++有点复杂。您可以将C++中的结构转换为另一个结构,而仅仅是对那些结构的字节的重新解释。Java不是这样工作的。 爪哇和C++中的泛型也大不相同。不要过分关注你如何在Java中做C++的事情。你需要学习如何用Java方式做事。 |
![]() |
4
10
它是
不
类似
C型CAST运算符的缺点一般不适用于Java。看起来像C样式的Java代码最类似于
通常比较C++的铸造操作符和Java的铸造是相当困难的,因为在爪哇中,只能对对象进行引用和转换(只有原始值可以使用此语法转换)。 |
![]() |
5
3
C++和Java是不同的语言。 Java C风格的CAST运算符比C/C++版本更受限制。实际上,JAVA CAST就像C++的DyrimCype,如果你的对象不能被转换到新的类,你将得到一个运行时间(或者如果代码中有足够的信息编译时间)异常。因此,不使用C类型转换的C++思想在Java中不是一个好主意。 |
![]() |
6
0
除了删除上面提到的丑陋的强制转换警告之外,class.cast是运行时强制转换,主要用于一般强制转换,由于一般信息将在运行时被删除,并且一些一般信息将被视为对象,这将导致不抛出早期的ClassCastException。 例如,serviceloder在创建对象时使用此技巧,检查s p=service.cast(c.newInstance());这将引发类强制转换异常 当s p=(s)c.newInstance();不会并且可能显示警告时 '类型安全:未选中从对象强制转换为s' (与object p=(object)c.newInstance();)相同 -只需检查强制转换对象是否是强制转换类的实例,然后使用强制转换运算符强制转换并隐藏警告。 动态CAST的Java实现
|
![]() |
7
0
就个人而言,我以前用过这个来构建一个JSON-to-Pojo转换器。如果用函数处理的jsonObject包含数组或嵌套的jsonObjects(意味着此处的数据不是基元类型或
不确定这是否非常有用,但是正如前面所说,反射是
|