代码片段:
private List<Animals> createAnimanlsIstance(Class cls) {
Class typeCastedObject = (cls)getObjectBySomeCalculation();
}
比方说,我在运行时以Dog.Class的形式传递Class,并且我想键入cast到Dog类Object。我如何才能做到这一点,我上面的代码只是一个示例,我想要的。
它不像:
if( obj instanceOf ClassA)
{
Object = (ClassA) obj;
}
我将传递Class的一个实例作为参数,例如:Dog.Class、Cat.Class等。
您可以尝试泛型:
private <T> List<Animals> createAnimalsInstance(Class<T> cls)
{
T typeCastedObject = (T) getObjectBySomeCalculation();
}
然后你可以像往常一样简单地使用这种方法:
List<Animals> animals = createAnimalsInstance(Dog.class);
仅供参考:如果你想做instanceof
,你可以使用Class.isAssignableFrom
:
if (obj instanceOf AClass)
相当于
if (AClass.isAssignableFrom(obj.getClass()))
您可能会使用泛型:
private <T> List<Animal> createAnimalsInstances(Class<T> clazz) {
T castedObject = (T) getObjectBySomeCalculation();
}
如果投射的对象打算添加到List<Animal>
中(即扩展Animal
),那么您需要:
private <T extends Animal> List<Animal> createAnimalsInstances(Class<T> clazz) {
T castedObject = (T) getObjectBySomeCalculation();
}
尝试这个
Class typeCastedObject = cls.cast(getObjectBySomeCalculation());