我最近偶然发现了一段像这样的代码:
Object o = .. ;
Foo foo = Foo.class.cast(o);
Run Code Online (Sandbox Code Playgroud)
我实际上甚至不知道java.lang.Class有一个强制转换方法,所以我查看了文档,从我收集的内容中,这只是对类对象所代表的类进行强制转换.所以上面的代码大致相当于
Object o = ..;
Foo foo = (Foo)o;
Run Code Online (Sandbox Code Playgroud)
所以我想知道,为什么我会想要使用强制转换方法而不是简单地进行"旧方法".有没有一个很好的例子,使用cast方法比简单的转换更有益?
我知道可以用于投射对象的以下三种方法.
Object o = "str";
String str1 = (String) o; // Method 1
String str2 = o.toString(); // Method 2
String str3 = String.class.cast(o); // Method 3
Run Code Online (Sandbox Code Playgroud)
我正在研究一个通用类,我想使用Class.cast()进行一些转换,以避免那些讨厌的未经检查的转换警告或方法上的@SupressWarning批注。
我认为Class.cast()应该与直接强制转换基本相同。但是,像所有反射方法一样,情况可能并非如此。有谁知道他们之间的确切区别?