【问题标题】:Java: How can I type cast to a "Runtime" Class?Java:如何将类型转换为“运行时”类?
【发布时间】:2014-04-23 07:16:14
【问题描述】:

代码 sn-p:

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

}

假设,我在运行时将类作为 Dog.class 传递,并且我想将类型转换为 Dog 类对象。 我怎样才能做到这一点,我上面的代码只是一个示例,我想要的。

不是这样的:

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

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

【问题讨论】:

    标签: java class reflection casting


    【解决方案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()))
    

    【讨论】:

    • 让我尝试所有这些,谢谢大家的建议,也很快:)
    【解决方案2】:

    你可能会使用泛型:

    private <T> List<Animal> createAnimalsInstances(Class<T> clazz) {
        T castedObject = (T) getObjectBySomeCalculation();    
    }
    

    如果要将转换的对象添加到 List&lt;Animal&gt; 中(即扩展 Animal),那么您需要:

    private <T extends Animal> List<Animal> createAnimalsInstances(Class<T> clazz) {
        T castedObject = (T) getObjectBySomeCalculation();    
    }
    

    【讨论】:

    • 谢谢,但是所有传递的类都不相关,而且类型转换后我必须调用一个api(所有类通用)。
    【解决方案3】:

    试试这个

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

    【讨论】:

      猜你喜欢
      • 2010-09-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多