如何获得泛型类?

时间:2019-06-27 03:10:39

标签: java

我正在阅读有关spring的源代码,并想知道通用的返回值类,我该怎么办?

public static <T> T getBean(String name) {
    assertContextInjected();
    System.out.println();
    return (T) applicationContext.getBean(name);
}

1 个答案:

答案 0 :(得分:2)

不幸的是,在Java中,简短的答案是你做不到。您可以将泛型基本上看作只是编译时功能,以确保正确处理。但是,编译后的字节码会在称为“类型擦除”的过程中丢弃所有类型信息,因此,有效的JVM在运行时得到的就是:

public static Object getBean(String name) {

但是,这些都不是您的问题的根本原因,这与您的通话有关。我认为你有类似的东西:

SomeClass someVariable = getBean("someName");

发生的事情是您所请求的bean不是SomeClass类型的(并且强制转换不会帮助您)-因此,您需要做的是弄清楚Spring给您的bean是哪个类,然后在调用方中更改“ SomeClass”以期望该类型。