Google Guice - 在java从v6升级到v7之后出现相同的擦除 - 编译错误

时间:2014-09-24 10:23:11

标签: 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);
}

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

但是在java升级到版本7之后,此代码已经开始提供编译错误

  

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

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

注意:Google Guice版本为2.0

我是否需要更新Guice或是否有解决方法?

1 个答案:

答案 0 :(得分:9)

Java 5和6编译器有一个可以接受你的方法的bug,因为他们认为签名包括检查中的返回类型。

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

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