Java cast:命令式还是编程式更好?
我已经看到有两种方法可以在Java中强制转换对象: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
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另一方面,code>是一个非反射操作,编译器可以证明List和ArrayList的类型参数是相同的,因此这是一个安全操作
因此,应该很清楚我更喜欢哪一种。不,我上了我心目中的前两门课……同样的动机,也可以应用于其他方法,如isAssignableFrom
,而不是instanceof
?@rascio是的。如果您使用的是反射,那么这是一种方法,因为您不知道将使用的真正类型。