Java cast:命令式还是编程式更好?

Java cast:命令式还是编程式更好?,java,casting,Java,Casting,我已经看到有两种方法可以在Java中强制转换对象: List<Object> l = new ArrayList(); ArrayList<Object> first = (ArrayList<Object>) l; ArrayList<Object> second = ArrayList.class.cast(l); listl=newarraylist(); ArrayList first=(ArrayList)l; ArrayList se

我已经看到有两种方法可以在Java中强制转换对象:

List<Object> l = new ArrayList();
ArrayList<Object> first = (ArrayList<Object>) l;
ArrayList<Object> second = ArrayList.class.cast(l);
listl=newarraylist();
ArrayList first=(ArrayList)l;
ArrayList second=ArrayList.class.cast(l);

哪一种更好?为什么?

更好的方法是可读性最好的。如果您已经知道要执行类型转换的类,请使用
(ClassToUpcast)对象
。如果您不知道类,但拥有
类clazz
对象,则使用
clazz.cast(object)
ArrayList second=ArrayList.class.cast(l)
应向您发出编译器警告,因为此反射操作无法检查列表的类型参数

ArrayList first=(ArrayList)l是一个非反射操作,编译器可以证明List和ArrayList的类型参数是相同的,因此这是一个安全操作


因此,应该很清楚我更喜欢哪一种。

不,我上了我心目中的前两门课……同样的动机,也可以应用于其他方法,如
isAssignableFrom
,而不是
instanceof
?@rascio是的。如果您使用的是反射,那么这是一种方法,因为您不知道将使用的真正类型。