Java:如何键入强制转换为“运行时”类?

时间:2014-04-23 07:16:15

标签: java class reflection casting

代码段:

private List<Animals> createAnimanlsIstance(Class cls) {
   Class typeCastedObject  =   (cls)getObjectBySomeCalculation();

}

让我们说,我在运行时传递Class为Dog.class,我想输入强制转换为Dog类Object。 我怎样才能做到这一点,我的上述代码只是一个样本,我想要的。

它不像:

 if( obj instanceOf ClassA)
 {
   Object = (ClassA)  obj;
  }

我将传递一个Class的实例作为参数,例如:Dog.class,Cat.class等。

3 个答案:

答案 0 :(得分:1)

您可以尝试使用泛型:

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()))

答案 1 :(得分:1)

您可以使用泛型:

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();    
}

答案 2 :(得分:0)

试试这个

Class typeCastedObject = cls.cast(getObjectBySomeCalculation());