Google Guice - 在从v6升级到v7之后,具有相同的擦除 - 编译错误

Bat*_*tty 5 java generics guice

我正在为我的项目将java版本从6升级到7.它曾经用java 6编译好.

@Provides
VptchProvIntf provideVptchProv(NeVersion neVersion, Provider<ClVptchProv> classicProvider,      Provider<RsVptchProv> rsProvider)
{
    return (VptchProvIntf)provideForPlatform(neVersion, classicProvider, rsProvider);
}

@Provides
StsnVcnProvIntf provideVptchProv(NeVersion neVersion, Provider<ClStsnVcnProv> classicProvider, Provider<RsStsnVcnProv> rsProvider)
{
    return (StsnVcnProvIntf)provideForPlatform(neVersion, classicProvider, rsProvider);
}
Run Code Online (Sandbox Code Playgroud)

这是来自解编译类的快照.类型没有被编译器擦除,代码编译得很好.

但是在java升级到版本7之后,这段代码已经开始出现编译错误

错误:名称冲突:provideVptchProv(NeVersion,Provider,Provider)和provideVptchProv(NeVersion,Provider,Provider)具有相同的擦除

Java 7是否改变了任何不允许Guice工作的东西.

注意:Google Guice版本为2.0

我需要更新Guice还是有任何解决方法?

Tav*_*nes 9

Java 5和6编译器有一个接受您的方法的错误,因为他们认为签名包括检查中的返回类型.

在Java 7中,无论返回类型如何,方法都不能具有相同的已擦除签名.请参阅此博客文章和此错误报告.

在您的情况下,答案是重命名您的一个方法.