Java中的某些方法为什么要求传入一个Class对象

Java中的某些方法为什么要求传入一个Class对象


  在Java中,某些方法要求传入一个Class对象,这能保证该方法能返回一个正确的类型的对象,从而免除返回后的强制类型转换。比如Spring容器中的getBean方法,此方法有两个常用的重载:

	 Object getBean(String name) throws BeansException;

	 <T> T getBean(String name, Class<T> requiredType) throws BeansException;

  这两个方法中,其中有一个方法多了一个类型为Class<T>的参数,那么,多提供这个Class<T>参数的作用是什么呢?

  熟悉Spring的读者应该很清楚,使用有Class<T>参数的getBean方法,可以免除之后的强制类型转换。因为Java支持基类引用指向子类对象,但基类引用只能调用基类方法,这一点与此基类引用指向的是本基类对象还是子类对象无关。也就是说,基类引用无法调用子类名称特有的方法(编译会不通过),而很多方法都会返回Object类型,这意味着强制转换经常是必要的。

  那么,为什么使用有Class<T>参数的方法可以做到这一点呢?或者说,如何通过传递Class<T>参数来使该方法能返回想要的类型呢?

  这可以通过设计这样的一个函数来实现:

    public static<T> T convertType(Object objToBeConverted, Class<T> convertedType) {
    
    
        return (T) objToBeConverted;
    }

  这样一来,强制类型转换 (SomeClass)someObject 即可由调用此函数 convertType(someObject, SomeClass.class) 来替代了(设SomeClass为某类名。someObject为Object引用类型,其指向SomeClass对象或其子类对象)。

  因此,对于本文开头提及的方法,如果传入类型为Class<T>的参数,该方法就能保证返回值类型为指定的类型。

猜你喜欢

转载自blog.csdn.net/wangpaiblog/article/details/113924204