我最近偶然发现了一段代码,它是这样的:
Object o = .. ;
Foo foo = Foo.class.cast(o);实际上,我甚至不知道java.lang.Class有一个强制转换方法,所以我查看了文档,从我收集到的信息来看,这只是对类对象所表示的类进行了强制转换。因此,上面的代码大致相当于
Object o = ..;
Foo foo = (Foo)o;所以我想知道,为什么我想要使用强制转换方法,而不是简单地使用“旧方法”进行强制转换。有没有一个很好的例子,说明使用强制转换方法比使用简单的强制转换方法更有好处?
发布于 2011-10-26 16:47:46
我认为它并不像你所展示的那样经常被使用。我见过的最常见的用法是,使用泛型的人们正在尝试做与此相当的事情:
public static <T extends Number> T castToNumber(Object o) {
return (T)o;
}由于类型擦除,它实际上并没有做任何有用的事情。
虽然这是可行的,而且是类型安全的(模数为ClassCastExceptions):
public static <T extends Number> T castToNumber(Object o, Class<T> clazz) {
return clazz.cast(o);
}编辑:来自google guava的几个使用示例:
发布于 2011-10-26 16:44:43
在Java中,给猫剥皮的方法通常不止一种。在您有框架代码的情况下,这样的功能可能很有用。想象一下这样一个方法,它接受一个Class对象实例和一个对象实例,并将对象case作为类返回:
public static void doSomething(Class<? extends SomeBaseClass> whatToCastAs,Object o)
{
SomeBaseClass castObj = whatToCastAs.cast(o);
castObj.doSomething();
}通常,使用更简单的强制转换,除非它还不够。
发布于 2011-10-26 16:45:44
在某些情况下,您只知道在运行时将对象强制转换为哪种类型,这时必须使用强制转换方法。
https://stackoverflow.com/questions/7900410
复制相似问题