有一个如下所示的泛型方法,想要用一个匹配类型的变量调用该方法。如何定义这样的变量?以及如何为其分配类型。
使用C1和C2调用它没问题
t.<C1> getListConfigObjects("foo", String.class);
t.<C2> getListConfigObjects("foo", String.class);
如何定义一个变量来调用泛型方法?
如何在Java中做这样的事情
Type <? extends JsonXformIntf> theType = C1.getType();
t.<theType> getListConfigObjects("foo", String.class);
theType = C2.getType();
t.<theType> getListConfigObjects("foo", String.class);
答案 0 :(得分:1)
假设它们都是编译的,那么就编译的字节码而言,这两者之间绝对没有区别(因此在运行时行为上没有可能的差异):
t.<C1>getListConfigObjects("foo", String.class);
t.<C2>getListConfigObjects("foo", String.class);
泛型只是编译时。在类型擦除之后,它们都是t.getListConfigObjects("foo", String.class);
。换句话说,您指定的类型参数在运行时不为方法所知。。
显式指定的类型参数的唯一用途是编译器的类型检查目的 - 显式指定正确的类型参数将允许编译器编译它(而编译器可能以其他方式推断它错误);相反,显式指定错误的类型参数将使其无法编译。但是,如果他们都编译,那么没有区别。
因此,指定在编译时未知的类型参数是没有意义的,因为编译时是唯一一次使用这种类型参数的时间。只需选择允许其编译的任何类型参数。