我正在尝试创建一个接受通用 Class
的函数,对 Class
的函数进行一些处理,然后返回所述 Class
的实例。
我收到编译器错误:error: cannot select from a type variable - [ERROR] T.getManagers(), T.class);
。这是函数:
public static <T extends Bar> T getFoo(Class<T> fooClass , String person)
{
T foo = null;
try
{
Configuration config = Configuration.getConfiguration(person);
foo = (T) Bar.getInstance(config,T.getManagers(), T.class);
}
catch (Exception e)
{
logger.error("Error", e);
}
return foo;
}
编辑:有什么办法可以绕过打电话 Bar.getManagers()
?我试图用泛型做的是,我已经说了 5 个与 Bar 非常相似但不完全相同的类。他们都有getManagers()
。通过使用类似 T.getManagers()
的通用名称我试图绕过在代码中调用显式名称并使用通用名称。
最佳答案
您正在尝试使用 Java 中不允许的结构:
您不能使用
T.getManagers()
,因为它是静态方法,并且类T
在运行时不可用(类型删除)。如果Bar
类中存在getManagers()
方法(并且它应该*),则使用Bar.getManagers()
代替。出于同样的原因,您不能使用
T.class
,类T
在运行时将不可用。请改用fooClass
。
您提供的代码应如下所示:
public static <T extends Bar> T getFoo(Class<T> fooClass , String person) {
T foo = null;
try {
Configuration config = Configuration.getConfiguration(person);
foo = (T) Bar.getInstance(config, Bar.getManagers(), fooClass);
} catch (Exception e) {
logger.error("Error", e);
}
return foo;
}
(*) 此方法应该位于 Bar
中,因为它似乎是您在此处使用的常见行为,并且您似乎期望所有 T
都能做到这一点可以扩展Bar
。静态方法不存在继承之类的东西。
关于java - 在泛型类中找不到方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23135121/